In [28]:
#
## Source data
## Taken from https://github.com/udacity/CarND-Advanced-Lane-Lines
#
%matplotlib inline
import matplotlib.pyplot as plt
import cv2
from glob import glob

data_path = "../CarND-Advanced-Lane-Lines/"
data = {
    'calibrate': glob(data_path+"camera_cal/*"),
    'test': glob(data_path+"test_images/*.jpg"),
    'video': glob(data_path+"*.mp4")
}

print("Found {} calibration images, {} test images, and {} videos".format(
     len(data['calibrate']), len(data['test']), len(data['video'])))
Found 20 calibration images, 8 test images, and 3 videos
In [2]:
## Showcase our calibration images
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import os

print("Here are 8 of our calibration images")
%matplotlib inline
fig = plt.figure()
plt.axis('off')
fig.tight_layout()
for i in range(0, 2):
    for j in range(0, 4):
        n = i*4+j
        ax = fig.add_subplot(4, 2, n+1)
        plt.axis('off')
        img = cv2.imread(data['calibrate'][n])
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        plt.imshow(gray, cmap='gray')
Here are 8 of our calibration images
In [29]:
#
## Map points in the image to points in the real world
## using canonical chessboard images.  We loop through a set
## of images and try to find the grid in each, then keep
## these points around for calibration.
#
import numpy as np
import cv2

cbase = "./calibration/"

# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
objp = np.zeros((6*8,3), np.float32)
objp[:,:2] = np.mgrid[0:8, 0:6].T.reshape(-1,2)

# Arrays to store object points and image points from all the images.
objpoints = [] # 3d points in real world space
imgpoints = [] # 2d points in image plane.

# Step through the list and search for chessboard corners
found = 0
for fname in data['calibrate']:
    print("Testing "+os.path.basename(fname))
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # Find the chessboard corners
    ret, corners = cv2.findChessboardCorners(gray, (8,6), None)

    # If found, add object points, image points
    if ret == True:
        print("... found corners")
        objpoints.append(objp)
        imgpoints.append(corners)
        cv2.drawChessboardCorners(img, (8,6), corners, ret)
        write_name = cbase+'corners_found'+str(found)+'.jpg'
        cv2.imwrite(write_name, img)
        found += 1

print("We found corners in {} images".format(found))
Testing calibration1.jpg
Testing calibration10.jpg
Testing calibration11.jpg
Testing calibration12.jpg
Testing calibration13.jpg
Testing calibration14.jpg
... found corners
Testing calibration15.jpg
Testing calibration16.jpg
Testing calibration17.jpg
Testing calibration18.jpg
Testing calibration19.jpg
Testing calibration2.jpg
... found corners
Testing calibration20.jpg
Testing calibration3.jpg
Testing calibration4.jpg
Testing calibration5.jpg
Testing calibration6.jpg
Testing calibration7.jpg
Testing calibration8.jpg
Testing calibration9.jpg
We found corners in 2 images
In [30]:
def region_of_interest(img, vertices):
    """
    Applies an image mask.
    
    Only keeps the region of the image defined by the polygon
    formed from `vertices`. The rest of the image is set to black.
    """
    #defining a blank mask to start with
    mask = np.zeros_like(img)   
    
    #defining a 3 channel or 1 channel color to fill the mask with depending on the input image
    if len(img.shape) > 2:
        channel_count = img.shape[2]  # i.e. 3 or 4 depending on your image
        ignore_mask_color = (255,) * channel_count
    else:
        ignore_mask_color = 255
        
    #filling pixels inside the polygon defined by "vertices" with the fill color  
    #print(vertices, ignore_mask_color)
    cv2.fillConvexPoly(mask, vertices, ignore_mask_color)
    
    #returning the image only where mask pixels are nonzero
    masked_image = cv2.bitwise_and(img, mask)
    return masked_image

def clip_bottom(img):
    vertices = np.int32([[[60,0], [1179,0], [1179,650], [60,650]]])
    return region_of_interest(img, vertices)

def lane_region(img):
    #print("img shape ", img.shape)
    #vertices = np.int32([[[0, 0], [1279,0], [1279,360], [979,719],
                  # [299,719], [0, 360], [0,0]]])
    vertices = np.int32([[[640, 425], [1179,550], [979,719],
                   [299,719], [100, 550], [640, 425]]])
    #np.array([[(dx,ysize), (center-2, dy), (center+2,dy), (xsize-dx, ysize)]], dtype=np.int32)
    #vertices = np.int32([[[0, 0], [0,1279], [524,1279], [719,979],
                   #[719,299], [524,0]]])
    return region_of_interest(img, vertices)
In [33]:
#
## Test undistortion on an image
#
import random

img = cv2.imread(random.choice(data['calibrate']))
img_size = (img.shape[1], img.shape[0])

# Do camera calibration given object points and image points
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size,None,None)

dst = cv2.undistort(img, mtx, dist, None, mtx)
plt.imshow(dst)
#cv2.imwrite(cpath+'/calibration_wide/test_undist.jpg',dst)
Out[33]:
<matplotlib.image.AxesImage at 0x11329f438>
In [34]:
#
## Save our distortion data
#
import pickle

# Save the camera calibration result for later use (we won't worry about rvecs / tvecs)
dist_pickle = {}
dist_pickle["mtx"] = mtx
dist_pickle["dist"] = dist
pickle.dump( dist_pickle, open(cbase+"calibration.p", "wb" ))

#dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
# Visualize undistortion
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,10))
ax1.imshow(img)
ax1.set_title('Original Image', fontsize=30)
ax2.imshow(dst)
ax2.set_title('Undistorted Image', fontsize=30)
Out[34]:
<matplotlib.text.Text at 0x10489e470>
In [35]:
## Showcase our test images

print("Here are 8 of our test images from {} available.".format(len(data['test'])))
test_samples = random.sample(data['test'],8)
fig = plt.figure()
plt.axis('off')
fig.tight_layout()
for i in range(0, 2):
    for j in range(0, 4):
        n = i*4+j
        ax = fig.add_subplot(4, 2, n+1)
        plt.axis('off')
        plt.imshow(mpimg.imread(test_samples[n]))
Here are 8 of our test images from 8 available.
In [36]:
# 
# Here's a key trick - shift to HSV (hue, saturation, value)
# then apply color masks.
#

def yellow_mask(rgb):
    hsv = cv2.cvtColor(rgb, cv2.COLOR_RGB2HSV)
    lower  = np.array([ 0, 80, 200])
    upper = np.array([ 40, 255, 255])
    mask = np.array(cv2.inRange(hsv, lower, upper))
    #print("mask is ", mask.shape)
    mask[mask > 0] = 1
    return mask
 
# Run the function
fig = plt.figure()
plt.axis('off')
fig.tight_layout()
images = random.sample(test_samples, 4)
for i in range(0,4):
    raw = cv2.imread(images[i])
    raw = cv2.resize(raw, (1280, 720), interpolation = cv2.INTER_CUBIC)
    image = cv2.undistort(raw, mtx, dist, None, mtx)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    
    fig.add_subplot(4, 2, i*2+1)
    plt.axis('off')
    plt.imshow(lane_region(image))
    fig.add_subplot(4, 2, i*2+2)
    plt.axis('off')
    plt.imshow(lane_region(yellow_mask(image)), cmap='gray')
In [37]:
#
# Now try a white mask
#

def white_mask(rgb):
    # expects image in rgb
    yuv = cv2.cvtColor(rgb, cv2.COLOR_RGB2YUV)
    y = yuv[:,:,0]
    mask = np.zeros_like(y)
    bits = np.where(y  > 100)  # was 175
    mask[bits] = 1
    kernel = np.ones((11,11),np.float32)/(1-11*11)
    kernel[5,5] = 1.0
    mask2 = cv2.filter2D(y,-1,kernel)
    mask[mask2 < 5] = 0
    return mask

# Run the function
fig = plt.figure()
plt.axis('off')
fig.tight_layout()
images = random.sample(test_samples, 4)
for i in range(0,4):
    raw = cv2.imread(images[i])
    raw = cv2.resize(raw, (1280, 720), interpolation = cv2.INTER_CUBIC)
    image = cv2.undistort(raw, mtx, dist, None, mtx)
    rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    fig.add_subplot(4, 2, i*2+1)
    plt.axis('off')
    plt.imshow(rgb)
    fig.add_subplot(4, 2, i*2+2)
    plt.axis('off')
    plt.imshow(lane_region(white_mask(rgb)), cmap='gray')
In [38]:
#
# Define a filter to find lines in an image,
# combining Sobel and color filters.  Test it
# on an image.
#

# Define a function that applies Sobel x or y, 
# then takes an absolute value and applies a threshold.
def abs_sobel_thresh(gray, orient='x', thresh_min=20, thresh_max=100):
    sobel = cv2.Sobel(gray, cv2.CV_64F, (orient=='x'), (orient=='y'))
    abs_sobel = np.absolute(sobel)
    max_sobel = max(1,np.max(abs_sobel))
    scaled_sobel = np.uint8(255*abs_sobel/max_sobel)
    binary_output = np.zeros_like(scaled_sobel)
    binary_output[(scaled_sobel >= thresh_min) & (scaled_sobel <= thresh_max)] = 1
    return binary_output

def lane_threshold(rgb):
    # Combine sobel & hls filters, then OR them together.
    #hls = cv2.GaussianBlur(hls, (5,5), 0)
    white = white_mask(rgb)
    yellow = yellow_mask(rgb)
    green = abs_sobel_thresh(rgb[:,:,2])
    gray = cv2.cvtColor(rgb, cv2.COLOR_RGB2GRAY)
    shadows = abs_sobel_thresh(gray, orient='x', thresh_min=10, thresh_max=64)
    return yellow | white | green | shadows

# Run the function
fig = plt.figure()
plt.axis('off')
fig.tight_layout()
images = test_samples[4:8]
for i in range(0,4):
    raw = cv2.imread(images[i])
    raw = cv2.resize(raw, (1280, 720), interpolation = cv2.INTER_CUBIC)
    image = cv2.undistort(raw, mtx, dist, None, mtx)
    rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    grad_binary = lane_threshold(rgb)
    
    fig.add_subplot(4, 2, i*2+1)
    plt.axis('off')
    plt.imshow(cv2.cvtColor(lane_region(image), cv2.COLOR_BGR2RGB))
    fig.add_subplot(4, 2, i*2+2)
    plt.axis('off')
    plt.imshow(lane_region(grad_binary), cmap='gray')
In [39]:
# 
# Perspective transform
#

# Let's test our coordinates and make sure
# we've chosen a trapezoid in the right order for
# our transformation function, which needs
# (tl, tr, br, bl) order.

src = np.float32(((720, 305), (552, 500), (552, 856), (720, 1176)))

#ifile = "../CarND-Advanced-Lane-Lines/test_images/test2.jpg"
ifile = "../CarND-Advanced-Lane-Lines/test_images/test1.jpg"
#ifile = "./movies/frame600.jpg"
#ifile = "./movies/frame14.jpg"
#ifile = "./movies/frame67.jpg"
#ifile = "../CarND-Advanced-Lane-Lines/test_images/solidWhiteRight.jpg"

raw = cv2.imread(ifile)
raw = cv2.resize(raw,(1280, 720), interpolation = cv2.INTER_CUBIC)

image = cv2.undistort(raw, mtx, dist, None, mtx)
raw = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#img = correct_image(raw.copy())
img = raw
plt.axis('off')
plt.imshow(img)
plt.plot(500, 548, '.g') #top left
plt.plot(858, 548, '.b') #top right
plt.plot(1138, 712, '.y') #bottom.right
plt.plot(312, 712, '.r') #bottom left
Out[39]:
[<matplotlib.lines.Line2D at 0x1189eea58>]
In [40]:
#
# Ok that looks good, lets record it as our source src and find a rectangle for
# the destination and test it here.

src = np.float32(((500, 548), (858, 548), (1138, 712), (312, 712)))

plt.axis('off')
plt.imshow(img)
plt.plot(350, 600, '.g') #top left
plt.plot(940, 600, '.b') #top right
plt.plot(940, 720, '.y') #bottom.right
plt.plot(350, 720, '.r') #bottom left
Out[40]:
[<matplotlib.lines.Line2D at 0x11cd3e7f0>]
In [41]:
#
# Now both look good.  Record the destination, compute our transform,
# and test it.
#

dst = np.float32(((350, 600), (940, 600), (940, 720), (350, 720)))
M = cv2.getPerspectiveTransform(src, dst)

fig = plt.figure()
fig.add_subplot(2, 2, 1)
plt.axis('off')
plt.imshow(img)

img_size = (img.shape[1], img.shape[0])
warped = cv2.warpPerspective(img, M, img_size, flags=cv2.INTER_LINEAR)

fig.add_subplot(2, 2, 2)
plt.axis('off')
plt.imshow(warped)
Out[41]:
<matplotlib.image.AxesImage at 0x1262aa470>
In [42]:
#
# Here we introduce a shadow mask to eliminate
# dark regions caused by occlusions or sun
#

def shadow_mask(img):
    bw = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    bits = np.zeros_like(bw)
    thresh = np.mean(bw)
    bits[bw > thresh] = 1
    return bits
    #print(bw.shape)
    
shadow_mask(warped)
plt.imshow(shadow_mask(warped), cmap='gray')
Out[42]:
<matplotlib.image.AxesImage at 0x1195ed320>
In [43]:
#
# Let's combine all three
#

fig = plt.figure()
fig.add_subplot(1,2,1)
plt.axis('off')
plt.imshow(warped, cmap='gray')

img_size = (img.shape[1], img.shape[0])
warped = cv2.warpPerspective(img, M, img_size, flags=cv2.INTER_LINEAR)
lines = clip_bottom(lane_threshold(warped)) & shadow_mask(warped)
fig.add_subplot(1, 2, 2)
plt.axis('off')
plt.imshow(lines, cmap='gray')
Out[43]:
<matplotlib.image.AxesImage at 0x11cd06588>
In [44]:
#
# Let's create a histogram of our transformed, edge-detected image
#

n_hist_cutoff = 0
print(lines.shape)
histogram = np.mean(lines[np.int(lines.shape[0]*n_hist_cutoff):,:], axis=0)
plt.plot(histogram)
(720, 1280)
Out[44]:
[<matplotlib.lines.Line2D at 0x11d937f98>]
In [45]:
#
# Let's smooth the signal using 1D convolutions
#

def smooth(x, window_len=32):
    w = np.hanning(window_len)
    s = np.r_[x[window_len-1:0:-1],x,x[-1:-window_len:-1]]
    return np.convolve(w/w.sum(),s,mode='valid')

clean = smooth(histogram)
plt.plot(clean)
Out[45]:
[<matplotlib.lines.Line2D at 0x119689cc0>]
In [46]:
#
# Take the mean, std deviation on the left,
# then the mean, std deviation on the right
#
# Overlay these points on our image
#
import matplotlib.patches as patches

M_inv = cv2.getPerspectiveTransform(dst, src)

def peak_window(h, idx):
    lo = idx
    hi = idx
    while lo > 0 and h[lo] > 0.05:
        lo += -1
    while hi < len(h) and h[hi] > 0.05:
        hi += 1
    return lo, hi

def lane_boundaries(h):
    midpoint = int(len(h)/2)
    l_lo, l_hi = peak_window(h, np.argmax(h[0:midpoint]))
    r_lo, r_hi = peak_window(h, midpoint+np.argmax(h[midpoint:]))
    return l_lo, l_hi, r_lo, r_hi

fig1 = plt.figure()
ax = fig.add_subplot(111)
plt.axis('off')
plt.imshow(lines, cmap='gray')
l_lo, l_hi, r_lo, r_hi = lane_boundaries(clean)
plt.plot(l_lo, 720, 'or') #midpoint left
plt.plot(l_hi, 720, 'or') #midpoint left
plt.plot(r_lo, 720, 'ob') #midpoint right
plt.plot(r_hi, 720, 'ob') #midpoint right
Out[46]:
[<matplotlib.lines.Line2D at 0x13633d6a0>]
In [47]:
#
# Let's do a sliding window and see what points we get
#

def sliding_window(src, dst, l_lo, l_hi, r_lo, r_hi):
    dst[:,l_lo:l_hi] = src[:,l_lo:l_hi]
    dst[:,r_lo:r_hi] = src[:,r_lo:r_hi]

bits = np.zeros_like(lines)
sliding_window(lines, bits, l_lo, l_hi, r_lo, r_hi)
plt.axis('off')
plt.imshow(bits, cmap='gray')
Out[47]:
<matplotlib.image.AxesImage at 0x1287ea0b8>
In [48]:
#
# Let's fit a line to left and right pixels
#

def fit_line_to_sliding_y(img, l_lo, l_hi, r_lo, r_hi):
    clean = np.zeros_like(img)
    mid = int(clean.shape[1]/2)
    sliding_window(img, clean, l_lo, l_hi, r_lo, r_hi)
    x_l, y_l = np.where(clean[:,0:mid] == 1)
    x_r, y_r = np.where(clean[:,mid:] == 1)
    try:
        fit_fn_l = np.polyfit(x_l, y_l, 2)
    except:
        print("Left fit fail")
        fit_fn_l = None
    try:
        fit_fn_r = np.polyfit(x_r, y_r+mid, 2)
    except:
        print("Right fit fail")
        fit_fn_r = None
    return clean, fit_fn_l, fit_fn_r 

bits, left_fit,right_fit = fit_line_to_sliding_y(lines, l_lo, l_hi, r_lo, r_hi) 

def fit_y(f, y):
    return f[0]*y**2 + f[1]*y + f[2]

yplot = np.arange(0, bits.shape[0])
xplot_l = fit_y(left_fit, yplot) 
xplot_r = fit_y(right_fit, yplot) 

plt.axis('off')
plt.imshow(bits, cmap='gray')

plt.plot(xplot_l, yplot, color='red', linewidth=2)
plt.plot(xplot_r, yplot, color='blue', linewidth=2)
Out[48]:
[<matplotlib.lines.Line2D at 0x133778be0>]
In [49]:
#
# Use our fitted lines as a guide for extracting pixels
# within a window, then fit a line to these pixels.
#
# We will use this when transitioning from one frame to another
# in the video
#

def pixel_fit(src, fit, window=60):
    dst = np.zeros_like(src)
    if fit is None:
        return None, dst, True
    max_x = src.shape[0]-1
    max_y = src.shape[1]-1
    for x in range(max_x, 0, -1):
        y = int(0.5+fit_y(fit, x))
        lo_y = max(0, y-window)
        hi_y = min(max_y, y+window)
        #print("x,y_lo,y_hi = ", x, lo_y, hi_y)
        dst[x,lo_y:hi_y] = src[x,lo_y:hi_y]
        if y >=0 and y < max_y:
            pass
            #dst[x,y] = 1
    x,y = np.where(dst > 0)
    try:
        new_fit = np.polyfit(x, y, 2)
        weak = False
    except:
        weak = True
        print("Weak!")
        new_fit = fit
    return new_fit, dst, weak

p_left_fit, p_left_bits, p_left_weak = pixel_fit(lines, left_fit)
p_right_fit, p_right_bits, p_right_weak = pixel_fit(lines, right_fit)

xplot2_l = fit_y(p_left_fit, yplot) 
xplot2_r = fit_y(p_right_fit, yplot) 
p_bits = p_left_bits | p_right_bits

plt.axis('off')
#plt.imshow(lines, cmap='gray')
plt.imshow(p_bits, cmap='gray')

plt.plot(xplot2_l, yplot, color='red', linewidth=2)
plt.plot(xplot_l, yplot, color='pink', linewidth=2)
plt.plot(xplot2_r, yplot, color='blue', linewidth=2)
plt.plot(xplot_r, yplot, color='pink', linewidth=2)
#
#
Out[49]:
[<matplotlib.lines.Line2D at 0x12891bf60>]
In [50]:
#
# Let's compute the curvature of our lines,
# compensating for warping in the image
# and using stock values or pixels to meters as
# shown in the assignment.
#

def fit_to_points(src, fit):
    max_x = src.shape[0]-1
    max_y = src.shape[1]-1
    dx = 30
    pts = []
    for x in range(0, max_x, dx):
        y = int(0.5+fit_y(fit, x))
        if y >= 0 and y < max_y:
            pts.append([x, y])
    return np.array(pts)

def fit_curvature(src, fit):
    if fit is None:
        return np.inf
    ym_per_pix = 30/720 # meters per pixel in y dimension
    xm_per_pix = 3.7/700 # meteres per pixel in x dimension
    y_eval = src.shape[1]-1
    pts = fit_to_points(src, fit)
    fit_cr = np.polyfit(pts[:,0]*ym_per_pix, pts[:,1]*xm_per_pix, 2)
    curverad = ((1 + (2*fit_cr[0]*y_eval + fit_cr[1])**2)**1.5) \
                                 /np.absolute(2*fit_cr[0])
    return curverad
    
print("left curve radius: {}m".format(fit_curvature(bits, p_left_fit)))
print("right curve radius: {}m".format(fit_curvature(bits, p_right_fit)))
# Example values: 3380.7 m    3189.3 m
left curve radius: 9445.020990056511m
right curve radius: 10832.676556650042m
In [51]:
#
# Let's draw our lane
#

lane = np.zeros_like(lines)

def fit_points(y, fit):
    return fit[0]*y**2 + fit[1]*y + fit[2]

x_left = fit_points(yplot, p_left_fit) 
x_right = fit_points(yplot, p_right_fit)
coords = np.indices(bits.shape)
lane[coords[1] >= fit_points(coords[0], p_left_fit)] = 1
lane[coords[1] > fit_points(coords[0], p_right_fit)] = 0

plt.imshow(lane, cmap='gray')
    
Out[51]:
<matplotlib.image.AxesImage at 0x133774048>
In [52]:
#
# Show our lane as back on our original image
#

M_inv = cv2.getPerspectiveTransform(dst, src)
lane_size = (lane.shape[1], lane.shape[0])
warped_back = cv2.warpPerspective(lane, M_inv, lane_size, flags=cv2.INTER_LINEAR)

plt.imshow(warped_back, cmap='gray')
Out[52]:
<matplotlib.image.AxesImage at 0x126a04630>
In [53]:
#
# Finally, overlay our road on the original image
#

output = np.zeros_like(img)
overlay = np.zeros_like(img)
overlay[:,:,1] = warped_back*255
alpha = 0.3
cv2.addWeighted(overlay, alpha, img, 1 - alpha, 0, output)
plt.imshow(output)
Out[53]:
<matplotlib.image.AxesImage at 0x11ee94cf8>
In [54]:
#
# Put the pipeline together
#

#
# Variables
#  mtx = matrix from camera distortion
#  dist = from camera distortion
#  M = perspective transformation
#  M_inv = inverse prospective tranformation

n_inches_per_lane = 12*12

def scale_ok(scale):
    #print("Testing scale ", scale)
    return (scale is not None) and scale > 3.5 and scale < 7.0

def wheres_my_lane(img_shape, left_fit, right_fit):
    left_marker = None
    right_marker = None
    scale = None
    off_center = None
    lane_size_pixels = None
    y = img_shape[1] 
    max_x = img_shape[0]
    if left_fit is not None:
        left_marker = fit_points(y, left_fit) 
    if right_fit is not None:
        right_marker = fit_points(y, right_fit)
    #print("Markers [{}, {}]".format(left_marker,right_marker))
    if left_marker is not None and right_marker is not None:
        lane_size_pixels = max(2,right_marker - left_marker)
        centered_left = (max_x - lane_size_pixels)*0.5
        off_center = (centered_left - left_marker)/lane_size_pixels
        off_center = n_inches_per_lane*off_center
        scale = lane_size_pixels / n_inches_per_lane
        
    ok = (left_fit is not None)
    ok = ok and (right_fit is not None)
    ok = ok and scale_ok(scale)
    #ok = ok and lane_fit_ok(left_fit, right_fit)
    return {'ok': ok,
            'left': left_marker, 
            'right': right_marker, 
            'lane_pixels': lane_size_pixels,
            'off_center': off_center,
            'left_fit': left_fit,
            'left_curve': None,
            'left_right': None,
            'right_fit': right_fit,
            'scale': scale}

def correct_image(img):
    # create a CLAHE object (Arguments are optional).
    clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
    blue = clahe.apply(img[:,:,0])
    green = clahe.apply(img[:,:,1])
    red = clahe.apply(img[:,:,2])
    img[:,:,0] = blue
    img[:,:,1] = green
    img[:,:,2] = red
    return img

def fit_ok(new_fit, old_fit, threshold=0.05):
    if new_fit is None and old_fit is not None:
        return True
    if new_fit is not None and old_fit is None:
        return True
    return np.all(np.array(np.abs((new_fit-old_fit)/old_fit)) <= threshold)

def sob(plane,n=0):
    sobelized = abs_sobel_thresh(plane)
    rgb = np.zeros((plane.shape[0], plane.shape[1], 3), dtype=np.float32)
    rgb[:,:,n] = sobelized*255
    return rgb

def create_mosaic(info, frame):
    # middle panel text example
    # using cv2 for drawing text in diagnostic pipeline.
    font = cv2.FONT_HERSHEY_COMPLEX
    middlepanel = np.zeros((120, 1280, 3), dtype=np.uint8)
    s = info['scale']
    if s is None:
        s = 0
    lc = info['left_curve']
    rc = info['right_curve']
    scale = 'Frame {} scale {:.4f} curve {:.0f},{:.0f}'.format(frame,s,lc,rc)
    cv2.putText(middlepanel, scale, (30, 60), font, 1, (255,0,0), 2)
    offc = info['off_center']
    if offc is None:
        offc = 0
    off = 'Inches to right of center: {:.4f}'.format(offc)
    cv2.putText(middlepanel, off, (30, 90), font, 1, (255,0,0), 2)
    # assemble the screen example
    diagScreen = np.zeros((1080, 1920, 3), dtype=np.uint8)
    raw, diag1, diag2, diag3, diag4, diag5, diag6 = info['diags']
    #print("main",mainDiagScreen.shape)
    diagScreen[0:720, 0:1280] = diag6
    diagScreen[720:840, 0:1280] = middlepanel
    diagScreen[840:1080, 0:320] = cv2.resize(raw, (320,240), interpolation=cv2.INTER_AREA)
    diagScreen[840:1080, 320:640] = cv2.resize(diag1, (320,240), interpolation=cv2.INTER_AREA)
    diagScreen[840:1080, 640:960] = cv2.resize(diag2, (320,240), interpolation=cv2.INTER_AREA)
    diagScreen[840:1080, 960:1280] = cv2.resize(diag3, (320,240), interpolation=cv2.INTER_AREA)
    diagScreen[840:1080, 1280:1600] = cv2.resize(diag4, (320,240), interpolation=cv2.INTER_AREA)
    diagScreen[840:1080, 1600:1920] = cv2.resize(diag5, (320,240), interpolation=cv2.INTER_AREA)
    
    diagScreen[0:240, 1280:1600] = cv2.resize(sob(raw[:,:,0],0), (320, 240), 
                                              interpolation=cv2.INTER_AREA)
    diagScreen[240:480, 1280:1600] = cv2.resize(sob(raw[:,:,1],1), (320, 240), 
                                              interpolation=cv2.INTER_AREA)
    diagScreen[480:720, 1280:1600] = cv2.resize(sob(raw[:,:,2],2), (320, 240), 
                                              interpolation=cv2.INTER_AREA)
    
    hls = cv2.cvtColor(raw, cv2.COLOR_RGB2HLS)
    diagScreen[0:240, 1600:1920] = cv2.resize(bw(hls[:,:,0]), (320, 240), 
                                              interpolation=cv2.INTER_AREA)
    diagScreen[240:480, 1600:1920] = cv2.resize(bw(hls[:,:,1]), (320, 240), 
                                              interpolation=cv2.INTER_AREA)
    diagScreen[480:720, 1600:1920] = cv2.resize(bw(hls[:,:,2]), (320, 240), 
                                              interpolation=cv2.INTER_AREA)
    
    result = cv2.resize(diagScreen, (1280,720), interpolation=cv2.INTER_AREA)
    
    return result

#create_mosaic(['foo'])

def bw(plane):
    bw = np.zeros((plane.shape[0], plane.shape[1], 3), dtype=np.float32)
    ramped = plane
    bw[:,:,0] = ramped
    bw[:,:,1] = ramped
    bw[:,:,2] = ramped
    return bw

n_fits = 10
dfit_threshold = (5.0,100.0)

left_fits = [] 
def left_moving_average(fit):
    global left_fits, n_fits
    while len(left_fits) > n_fits:
        left_fits = left_fits[1:]
    if fit is not None:
        if len(left_fits) > 0:
            df = dfit(fit, left_fits[-1])
            if df > dfit_threshold[0] and df < dfit_threshold[1]:
                #print("dfit_l ", dfit(fit, left_fits[-1]))
                return left_fits[-1]
        left_fits.append(fit) 
    if len(left_fits):
        return np.mean(np.array(left_fits), axis=0)
    return None

def dfit(f1, f2):
    raw = np.abs((f1-f2)/f2)
    #print("df ", raw)
    return np.mean(raw)

right_fits = []
def right_moving_average(fit):
    global right_fits, n_fits
    while len(right_fits) > n_fits:
        right_fits = right_fits[1:]
    if fit is not None:
        # gak we need a push function
        if len(right_fits) > 0:
            df = dfit(fit, right_fits[-1])
            if df > dfit_threshold[0] and df < dfit_threshold[1]:
                #print("dfit_r ", dfit(fit, right_fits[-1]))
                return right_fits[-1]
        right_fits.append(fit) 
    if len(right_fits):
        return np.mean(right_fits, axis=0)
    return None

fill_kernel = np.ones((5,5),np.uint8)

def process(img, 
            current_left = None, 
            current_right = None, 
            left_curve = None,
            right_curve = None,
            dcurve = 1e6,
            frame = 1):  
    diags = [img]
    #
    # img is an RGB image that has been corrected for camera distortion
    #
    
    # First, corrected image
    amped = correct_image(img.copy())
    #amped = img
    diags.append(amped) #1
    
    # Get a birds eye view of road
    warped_size = (amped.shape[1], amped.shape[0])
    warped = cv2.warpPerspective(amped, M, warped_size, flags=cv2.INTER_LINEAR)
    diags.append(warped) #2
    
    # Detect candidate lines on our road using a combination
    # of filters, then just look at our focus area.
    edges = clip_bottom(lane_threshold(warped)) & shadow_mask(warped)
    
    #
    # Compute histogram along vertical stripes, in search of lines.
    # Smooth them a bit then take the peaks as line centers.
    #
    histogram = np.mean(edges[np.int(edges.shape[0]*n_hist_cutoff):,:], axis=0)
    clean = smooth(histogram)
 
    # 
    # create a chart that overlays the histogram on our
    # candidate lane lines for debugging and analysis
    #
    chart = bw(edges*255)
    max_x = int(chart.shape[0]*0.9)
    x_scalar = float(max_x*0.8/max(1,np.max(clean)))
    y_scalar = float(chart.shape[1]-1)/len(clean)
    pts = []
    for i in range(0,len(clean)):
        ix = max_x-int(x_scalar*clean[i])
        iy = int(y_scalar*i)
        pts.append((iy,ix))
    pts = sorted(pts)
    for i in range(1,len(pts)):
        cv2.line(chart, pts[i-1], pts[i], (255, 0, 0), 5)
    diags.append(chart) #3
    
    #
    # extract pixels using a sliding window,
    # then pixels from the first curve,
    # then a moving average whenever
    # we run into a dead zone
    #
    if current_left is None or current_right is None:
        l_lo, l_hi, r_lo, r_hi = lane_boundaries(clean)
        bits, left_fit, right_fit = fit_line_to_sliding_y(edges, l_lo, l_hi, r_lo, r_hi)
    else:
        left_fit = current_left
        right_fit = current_right
    
    #
    # use pixels for a more accurate fit
    #
    p_left_fit, bits_l, weak_l = pixel_fit(edges, left_fit)
    p_right_fit, bits_r, weak_r = pixel_fit(edges, right_fit)
    
    # Now the moving average to smooth out kinks
    left_fit = left_moving_average(p_left_fit)
    right_fit = right_moving_average(p_right_fit)
    bits = bits_l | bits_r
    diag = bw(bits*255)
    diags.append(diag) #4 
    
    # default
    if left_fit is None:
        left_fit = current_left
    if right_fit is None:
        right_fit = current_right
    
    #
    # Compute curvature, then clip outliers
    #
    lc = fit_curvature(edges, left_fit)
    if False and left_curve is not None and lc != np.inf:
        if abs(lc-left_curve) > dcurve:
            lc = left_curve
            left_fit = current_left
            del left_fits[-1]
            
    rc = fit_curvature(edges, right_fit)
    if False and right_curve is not None and rc != np.inf:
        if abs(rc-right_curve) > dcurve:
            rc = right_curve
            right_curve = current_right
            del right_fits[-1]
    
    #
    # Draw our lane
    #
    lane = np.zeros_like(bits)
    coords = np.indices(lane.shape) # we could do this just once
    lane_stats = wheres_my_lane(warped_size, left_fit, right_fit)
    if (left_fit is not None) and (right_fit is not None):
        lane[coords[1] >= fit_points(coords[0], left_fit)] = 1
        lane[coords[1] > fit_points(coords[0], right_fit)] = 0
    diags.append(bw(lane*255))
    
    if not lane_stats['ok']:
        left_fit = current_left
        right_fit = current_left
    
    # 
    # Warp the lane back from birds-eye to normal view, then overlay it on the
    # original image in green.
    #
    warped_back = cv2.warpPerspective(lane, M_inv, warped_size, flags=cv2.INTER_LINEAR)
    overlay = np.zeros_like(img)
    overlay[:,:,1] = warped_back*255
    output = np.zeros_like(img)
    cv2.addWeighted(overlay, alpha, img, 1 - alpha, 0, output)
    diags.append(output) #6
    
    lane_stats['overlay'] = output
    lane_stats['original'] = img
    lane_stats['diags'] = diags
    lane_stats['lines'] = warped
    lane_stats['left_fit'] = left_fit
    lane_stats['right_fit'] = right_fit
    lane_stats['left_curve'] = lc
    lane_stats['right_curve'] = rc
    
    #lane_stats['prev_lines'] = lines
    
    #print("Saving warped ", warped.shape)
    if True or lane_stats['ok']:
        lane_stats['overlay'] = create_mosaic(lane_stats, frame)
    
    return lane_stats

    
In [55]:
# Run the function
def lane_2x2_figure(paths):
    images = [cv2.imread(p) for p in paths]
    lane_2x2_figure_raw(images)
    
status = None

def init():
    global status, left_fits, right_fits, frame
    status = init_lane_info()
    frame = 0
    left_fits = []
    right_fits = []
    
def init_lane_info():
    return {'ok': False,
            'prev_image': None,
            #'prev_lines': None,
            'lines': None,
            'left': None, 
            'right': None, 
            'lane_pixels': None,
            'off_center': None,
            'left_fit': None,
            'left_curve': None,
            'right_fit': None,
            'right_curve': None,
            'overlay': None,
            'scale': None}

def show_2x2_line(i, fig, image, memory = None, frame=1):
    init()
    if memory:
        lane = process(image, 
                       memory['left_fit'], 
                       memory['right_fit'], 
                       #memory['prev_lines'],
                       frame=frame)
    else:
        lane = process(image, frame=frame)
    out = lane['overlay']
    fig.add_subplot(2, 2, i*2+1)
    plt.axis('off')
    plt.imshow(image)
    plt.title('Original')
    fig.add_subplot(2, 2, i*2+2)
    plt.axis('off')
    plt.imshow(out)
    if not lane['ok']:
        err=':('
        if lane['left_fit'] is None:
            err += ' No left'
        if lane['right_fit'] is None:
            err += ' No right'
        if not scale_ok(lane['scale']):
            err += ' Bad size'
        plt.title(err)
    else:
        plt.title('Scale {:.2}ppi dx {:.4}'.format(
                lane['scale'], lane['off_center'])) 
    return lane
    
def lane_2x2_figure_raw(images):
    fig = plt.figure()
    plt.axis('off')
    fig.tight_layout()
    for i in range(0,2):
        raw = images[i]
        raw = cv2.resize(raw, (1280, 720), interpolation = cv2.INTER_CUBIC)

        rgb = cv2.cvtColor(raw, cv2.COLOR_BGR2RGB)
        image = cv2.undistort(rgb, mtx, dist, None, mtx)
        show_2x2_line(i, fig, image, frame=i+1)
        

lane_2x2_figure(random.sample(test_samples, 2))
In [56]:
lane_2x2_figure(random.sample(test_samples, 2))
In [57]:
lane_2x2_figure(random.sample(test_samples, 2))
In [58]:
#
# Lets augment and see what happens - should see no edges
#

blackout = np.zeros_like(img)
whiteout = np.zeros_like(img)
whiteout.fill(240)

fig = plt.figure()
plt.axis('off')
fig.tight_layout()
for idx, img in enumerate([blackout, whiteout]):
    lanes = lane_threshold(img)
    lane_size = (img.shape[1], img.shape[0])
    warped = cv2.warpPerspective(lanes, M, lane_size, flags=cv2.INTER_LINEAR)
    fig.add_subplot(2,2,idx*2+1)
    plt.axis('off')
    plt.title('Original')
    plt.imshow(img)
    fig.add_subplot(2,2,idx*2+2)
    plt.axis('off')
    plt.title('Edges')
    plt.imshow(lanes, cmap='gray')
In [59]:
#
# Let's see what we get for lanes 
#

lane_2x2_figure_raw([whiteout, blackout])
Left fit fail
Right fit fail
Left fit fail
Right fit fail
In [60]:
#
# Let's block out the left
#

raw = [cv2.imread(p) for p in random.sample(test_samples,2)]
for img in raw:
    img[:,0:int(img.shape[1]/2),:] = 0
    
lane_2x2_figure_raw(raw)
In [61]:
#
# Let's block out the right
#

raw = [cv2.imread(p) for p in random.sample(test_samples,2)]
for img in raw:
    img[:,int(img.shape[1]/2):,:] = 0
    
lane_2x2_figure_raw(raw)
Right fit fail
Right fit fail
In [62]:
#
# Let's process a good image, then keep the data,
# feed defaults into the processing of a bad image,
# and see if the lanes map from the first image to the
# next one.
#

raw = cv2.imread(random.choice(test_samples))
raw =[cv2.resize(raw, (1280, 720), interpolation = cv2.INTER_CUBIC)]
raw.append(np.zeros_like(raw[0]))

def lane_2x2_with_memory(images):
    memory = init_lane_info()
    fig = plt.figure()
    plt.axis('off')
    fig.tight_layout()
    for idx, img in enumerate(images):
        rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        image = cv2.undistort(rgb, mtx, dist, None, mtx)
        attempt = show_2x2_line(idx, fig, image, memory)
        if attempt['ok']:
            memory = attempt

lane_2x2_with_memory(raw)
Weak!
Weak!
In [63]:
# Import everything needed to edit/save/watch video clips
from moviepy.editor import VideoFileClip
from IPython.display import HTML
    
def anneal(img1,img2):
    # average the values of two images
    return cv2.addWeighted(img1,0.05,img2,0.95,0)
    
def process_image(image):
    global status, left_fits, right_fits, frame
    # NOTE: The output you return should be a color image (3 channel) for processing video below
    # TODO: put your pipeline here,
    # you should return the final output (image with lines are drawn on lanes)
    frame += 1
    if status['prev_image'] is not None:
        image = anneal(image, status['prev_image'])
    #print("Image ",image.shape)
    attempt = process(image, 
                      status['left_fit'], 
                      status['right_fit'], 
                      left_curve = status['left_curve'],
                      right_curve = status['right_curve'],
                      frame=frame)
    write_name = "./movies/frame{}.jpg".format(frame)
    bgr = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    cv2.imwrite(write_name, bgr)
    if attempt['ok']:
        status = attempt
        output = status['overlay']
    else:
        output = image
        if status['overlay'] is not None:
            output = status['overlay']
        err=':('
        if attempt['left_fit'] is None:
            err += ' No left'
        if attempt['right_fit'] is None:
            err += ' No right'
        if not scale_ok(attempt['scale']):
            err += ' Bad size {}'.format(attempt['scale'])
        print(err)
    status['prev_image'] = image
    #status['prev_lines'] = attempt['prev_lines']
    return output
In [65]:
print("Starting movie")
test_output = './movies/project.mp4'
test_input = '../CarND-Advanced-Lane-Lines/project_video.mp4'
clip1 = VideoFileClip(test_input)
init()
test_clip = clip1.fl_image(process_image) #NOTE: this function expects color images!!
test_clip.write_videofile(test_output, audio=False)
Starting movie
[MoviePy] >>>> Building video ./movies/project.mp4
[MoviePy] Writing video ./movies/project.mp4
  0%|          | 0/1261 [00:00<?, ?it/s]
  0%|          | 1/1261 [00:00<10:16,  2.04it/s]
  0%|          | 2/1261 [00:00<10:22,  2.02it/s]
  0%|          | 3/1261 [00:01<10:25,  2.01it/s]
  0%|          | 4/1261 [00:02<10:37,  1.97it/s]
  0%|          | 5/1261 [00:02<10:38,  1.97it/s]
  0%|          | 6/1261 [00:03<10:44,  1.95it/s]
  1%|          | 7/1261 [00:03<10:46,  1.94it/s]
  1%|          | 8/1261 [00:04<10:40,  1.96it/s]
  1%|          | 9/1261 [00:04<10:31,  1.98it/s]
  1%|          | 10/1261 [00:05<10:20,  2.02it/s]
  1%|          | 11/1261 [00:05<10:49,  1.92it/s]
  1%|          | 12/1261 [00:06<10:44,  1.94it/s]
  1%|          | 13/1261 [00:06<10:36,  1.96it/s]
  1%|          | 14/1261 [00:07<11:18,  1.84it/s]
  1%|          | 15/1261 [00:07<11:30,  1.80it/s]
  1%|▏         | 16/1261 [00:08<11:07,  1.86it/s]
  1%|▏         | 17/1261 [00:08<10:52,  1.91it/s]
  1%|▏         | 18/1261 [00:09<10:56,  1.89it/s]
  2%|▏         | 19/1261 [00:09<11:05,  1.87it/s]
  2%|▏         | 20/1261 [00:10<10:54,  1.90it/s]
  2%|▏         | 21/1261 [00:10<10:43,  1.93it/s]
  2%|▏         | 22/1261 [00:11<10:49,  1.91it/s]
  2%|▏         | 23/1261 [00:11<10:44,  1.92it/s]
  2%|▏         | 24/1261 [00:12<10:37,  1.94it/s]
  2%|▏         | 25/1261 [00:13<10:46,  1.91it/s]
  2%|▏         | 26/1261 [00:13<10:41,  1.93it/s]
  2%|▏         | 27/1261 [00:14<10:35,  1.94it/s]
  2%|▏         | 28/1261 [00:14<10:21,  1.98it/s]
  2%|▏         | 29/1261 [00:15<10:28,  1.96it/s]
  2%|▏         | 30/1261 [00:15<10:33,  1.94it/s]
  2%|▏         | 31/1261 [00:16<10:36,  1.93it/s]
  3%|▎         | 32/1261 [00:16<10:30,  1.95it/s]
  3%|▎         | 33/1261 [00:17<10:40,  1.92it/s]
  3%|▎         | 34/1261 [00:17<10:36,  1.93it/s]
  3%|▎         | 35/1261 [00:18<10:26,  1.96it/s]
  3%|▎         | 36/1261 [00:18<10:28,  1.95it/s]
  3%|▎         | 37/1261 [00:19<10:30,  1.94it/s]
  3%|▎         | 38/1261 [00:19<10:31,  1.94it/s]
  3%|▎         | 39/1261 [00:20<10:21,  1.97it/s]
  3%|▎         | 40/1261 [00:20<10:29,  1.94it/s]
  3%|▎         | 41/1261 [00:21<10:26,  1.95it/s]
  3%|▎         | 42/1261 [00:21<10:20,  1.96it/s]
  3%|▎         | 43/1261 [00:22<10:28,  1.94it/s]
  3%|▎         | 44/1261 [00:22<10:42,  1.89it/s]
  4%|▎         | 45/1261 [00:23<10:40,  1.90it/s]
  4%|▎         | 46/1261 [00:23<10:37,  1.91it/s]
  4%|▎         | 47/1261 [00:24<10:35,  1.91it/s]
  4%|▍         | 48/1261 [00:24<10:39,  1.90it/s]
  4%|▍         | 49/1261 [00:25<10:43,  1.88it/s]
  4%|▍         | 50/1261 [00:25<10:36,  1.90it/s]
  4%|▍         | 51/1261 [00:26<10:42,  1.88it/s]
  4%|▍         | 52/1261 [00:27<10:32,  1.91it/s]
  4%|▍         | 53/1261 [00:27<10:33,  1.91it/s]
  4%|▍         | 54/1261 [00:28<10:33,  1.91it/s]
  4%|▍         | 55/1261 [00:28<10:37,  1.89it/s]
  4%|▍         | 56/1261 [00:29<10:36,  1.89it/s]
  5%|▍         | 57/1261 [00:29<10:36,  1.89it/s]
  5%|▍         | 58/1261 [00:30<10:36,  1.89it/s]
  5%|▍         | 59/1261 [00:30<10:34,  1.89it/s]
  5%|▍         | 60/1261 [00:31<10:21,  1.93it/s]
  5%|▍         | 61/1261 [00:31<10:17,  1.94it/s]
  5%|▍         | 62/1261 [00:32<10:16,  1.94it/s]
  5%|▍         | 63/1261 [00:32<10:31,  1.90it/s]
  5%|▌         | 64/1261 [00:33<10:29,  1.90it/s]
  5%|▌         | 65/1261 [00:33<10:18,  1.93it/s]
  5%|▌         | 66/1261 [00:34<10:19,  1.93it/s]
  5%|▌         | 67/1261 [00:34<10:35,  1.88it/s]
  5%|▌         | 68/1261 [00:35<10:36,  1.88it/s]
  5%|▌         | 69/1261 [00:35<10:35,  1.87it/s]
  6%|▌         | 70/1261 [00:36<10:50,  1.83it/s]
  6%|▌         | 71/1261 [00:37<10:41,  1.85it/s]
  6%|▌         | 72/1261 [00:37<10:37,  1.86it/s]
  6%|▌         | 73/1261 [00:38<10:53,  1.82it/s]
  6%|▌         | 74/1261 [00:38<11:28,  1.72it/s]
  6%|▌         | 75/1261 [00:39<11:20,  1.74it/s]
  6%|▌         | 76/1261 [00:39<11:35,  1.70it/s]
  6%|▌         | 77/1261 [00:40<11:06,  1.78it/s]
  6%|▌         | 78/1261 [00:41<11:10,  1.76it/s]
  6%|▋         | 79/1261 [00:41<10:59,  1.79it/s]
  6%|▋         | 80/1261 [00:42<10:52,  1.81it/s]
  6%|▋         | 81/1261 [00:42<10:37,  1.85it/s]
  7%|▋         | 82/1261 [00:43<10:46,  1.82it/s]
  7%|▋         | 83/1261 [00:43<10:37,  1.85it/s]
  7%|▋         | 84/1261 [00:44<10:40,  1.84it/s]
  7%|▋         | 85/1261 [00:44<10:46,  1.82it/s]
  7%|▋         | 86/1261 [00:45<10:33,  1.85it/s]
  7%|▋         | 87/1261 [00:45<10:28,  1.87it/s]
  7%|▋         | 88/1261 [00:46<10:30,  1.86it/s]
  7%|▋         | 89/1261 [00:47<10:41,  1.83it/s]
  7%|▋         | 90/1261 [00:47<10:47,  1.81it/s]
  7%|▋         | 91/1261 [00:48<10:44,  1.82it/s]
  7%|▋         | 92/1261 [00:48<10:47,  1.81it/s]
  7%|▋         | 93/1261 [00:49<10:34,  1.84it/s]
  7%|▋         | 94/1261 [00:49<10:25,  1.87it/s]
  8%|▊         | 95/1261 [00:50<10:12,  1.90it/s]
  8%|▊         | 96/1261 [00:50<10:22,  1.87it/s]
  8%|▊         | 97/1261 [00:51<10:18,  1.88it/s]
  8%|▊         | 98/1261 [00:51<10:06,  1.92it/s]
  8%|▊         | 99/1261 [00:52<10:01,  1.93it/s]
  8%|▊         | 100/1261 [00:52<10:23,  1.86it/s]
  8%|▊         | 101/1261 [00:53<10:11,  1.90it/s]
  8%|▊         | 102/1261 [00:53<10:06,  1.91it/s]
  8%|▊         | 103/1261 [00:54<10:02,  1.92it/s]
  8%|▊         | 104/1261 [00:55<10:18,  1.87it/s]
  8%|▊         | 105/1261 [00:55<10:10,  1.89it/s]
  8%|▊         | 106/1261 [00:56<10:06,  1.91it/s]
  8%|▊         | 107/1261 [00:56<10:06,  1.90it/s]
  9%|▊         | 108/1261 [00:57<10:10,  1.89it/s]
  9%|▊         | 109/1261 [00:57<10:06,  1.90it/s]
  9%|▊         | 110/1261 [00:58<09:58,  1.92it/s]
  9%|▉         | 111/1261 [00:58<10:15,  1.87it/s]
  9%|▉         | 112/1261 [00:59<10:49,  1.77it/s]
  9%|▉         | 113/1261 [00:59<10:36,  1.80it/s]
  9%|▉         | 114/1261 [01:00<10:23,  1.84it/s]
  9%|▉         | 115/1261 [01:00<10:28,  1.82it/s]
  9%|▉         | 116/1261 [01:01<10:24,  1.83it/s]
  9%|▉         | 117/1261 [01:02<10:25,  1.83it/s]
  9%|▉         | 118/1261 [01:02<10:23,  1.83it/s]
  9%|▉         | 119/1261 [01:03<10:20,  1.84it/s]
 10%|▉         | 120/1261 [01:03<10:19,  1.84it/s]
 10%|▉         | 121/1261 [01:04<10:12,  1.86it/s]
 10%|▉         | 122/1261 [01:04<10:12,  1.86it/s]
 10%|▉         | 123/1261 [01:05<09:58,  1.90it/s]
 10%|▉         | 124/1261 [01:05<09:51,  1.92it/s]
 10%|▉         | 125/1261 [01:06<09:48,  1.93it/s]
 10%|▉         | 126/1261 [01:06<09:50,  1.92it/s]
 10%|█         | 127/1261 [01:07<09:42,  1.95it/s]
 10%|█         | 128/1261 [01:07<09:41,  1.95it/s]
 10%|█         | 129/1261 [01:08<09:42,  1.94it/s]
 10%|█         | 130/1261 [01:08<10:00,  1.88it/s]
 10%|█         | 131/1261 [01:09<09:50,  1.91it/s]
 10%|█         | 132/1261 [01:09<09:51,  1.91it/s]
 11%|█         | 133/1261 [01:10<09:48,  1.92it/s]
 11%|█         | 134/1261 [01:10<09:47,  1.92it/s]
 11%|█         | 135/1261 [01:11<09:56,  1.89it/s]
 11%|█         | 136/1261 [01:12<10:15,  1.83it/s]
 11%|█         | 137/1261 [01:12<10:17,  1.82it/s]
 11%|█         | 138/1261 [01:13<10:17,  1.82it/s]
 11%|█         | 139/1261 [01:13<10:15,  1.82it/s]
 11%|█         | 140/1261 [01:14<10:19,  1.81it/s]
 11%|█         | 141/1261 [01:14<10:23,  1.80it/s]
 11%|█▏        | 142/1261 [01:15<10:04,  1.85it/s]
 11%|█▏        | 143/1261 [01:15<09:50,  1.89it/s]
 11%|█▏        | 144/1261 [01:16<09:41,  1.92it/s]
 11%|█▏        | 145/1261 [01:16<09:46,  1.90it/s]
 12%|█▏        | 146/1261 [01:17<09:43,  1.91it/s]
 12%|█▏        | 147/1261 [01:17<09:36,  1.93it/s]
 12%|█▏        | 148/1261 [01:18<09:36,  1.93it/s]
 12%|█▏        | 149/1261 [01:18<09:46,  1.90it/s]
 12%|█▏        | 150/1261 [01:19<09:46,  1.90it/s]
 12%|█▏        | 151/1261 [01:20<09:40,  1.91it/s]
 12%|█▏        | 152/1261 [01:20<09:52,  1.87it/s]
 12%|█▏        | 153/1261 [01:21<09:49,  1.88it/s]
 12%|█▏        | 154/1261 [01:21<09:44,  1.89it/s]
 12%|█▏        | 155/1261 [01:22<09:38,  1.91it/s]
 12%|█▏        | 156/1261 [01:22<09:49,  1.88it/s]
 12%|█▏        | 157/1261 [01:23<09:50,  1.87it/s]
 13%|█▎        | 158/1261 [01:23<09:38,  1.91it/s]
 13%|█▎        | 159/1261 [01:24<09:33,  1.92it/s]
 13%|█▎        | 160/1261 [01:24<09:43,  1.89it/s]
 13%|█▎        | 161/1261 [01:25<09:32,  1.92it/s]
 13%|█▎        | 162/1261 [01:25<09:33,  1.92it/s]
 13%|█▎        | 163/1261 [01:26<09:35,  1.91it/s]
 13%|█▎        | 164/1261 [01:26<09:43,  1.88it/s]
 13%|█▎        | 165/1261 [01:27<09:47,  1.87it/s]
 13%|█▎        | 166/1261 [01:27<09:43,  1.88it/s]
 13%|█▎        | 167/1261 [01:28<09:38,  1.89it/s]
 13%|█▎        | 168/1261 [01:29<09:42,  1.88it/s]
 13%|█▎        | 169/1261 [01:29<09:42,  1.87it/s]
 13%|█▎        | 170/1261 [01:30<09:37,  1.89it/s]
 14%|█▎        | 171/1261 [01:30<09:40,  1.88it/s]
 14%|█▎        | 172/1261 [01:31<09:36,  1.89it/s]
 14%|█▎        | 173/1261 [01:31<09:31,  1.90it/s]
 14%|█▍        | 174/1261 [01:32<09:26,  1.92it/s]
 14%|█▍        | 175/1261 [01:32<09:31,  1.90it/s]
 14%|█▍        | 176/1261 [01:33<09:34,  1.89it/s]
 14%|█▍        | 177/1261 [01:33<09:30,  1.90it/s]
 14%|█▍        | 178/1261 [01:34<09:30,  1.90it/s]
 14%|█▍        | 179/1261 [01:34<09:31,  1.89it/s]
 14%|█▍        | 180/1261 [01:35<09:33,  1.88it/s]
 14%|█▍        | 181/1261 [01:35<09:41,  1.86it/s]
 14%|█▍        | 182/1261 [01:36<09:43,  1.85it/s]
 15%|█▍        | 183/1261 [01:37<09:55,  1.81it/s]
 15%|█▍        | 184/1261 [01:37<10:22,  1.73it/s]
 15%|█▍        | 185/1261 [01:38<10:50,  1.65it/s]
 15%|█▍        | 186/1261 [01:39<11:28,  1.56it/s]
 15%|█▍        | 187/1261 [01:39<12:20,  1.45it/s]
 15%|█▍        | 188/1261 [01:40<14:24,  1.24it/s]
 15%|█▍        | 189/1261 [01:41<14:31,  1.23it/s]
 15%|█▌        | 190/1261 [01:42<13:55,  1.28it/s]
 15%|█▌        | 191/1261 [01:43<13:26,  1.33it/s]
 15%|█▌        | 192/1261 [01:43<13:21,  1.33it/s]
 15%|█▌        | 193/1261 [01:44<13:08,  1.35it/s]
 15%|█▌        | 194/1261 [01:45<12:51,  1.38it/s]
 15%|█▌        | 195/1261 [01:45<12:15,  1.45it/s]
 16%|█▌        | 196/1261 [01:46<12:22,  1.43it/s]
 16%|█▌        | 197/1261 [01:47<12:11,  1.45it/s]
 16%|█▌        | 198/1261 [01:47<11:43,  1.51it/s]
 16%|█▌        | 199/1261 [01:48<11:04,  1.60it/s]
 16%|█▌        | 200/1261 [01:49<10:56,  1.62it/s]
 16%|█▌        | 201/1261 [01:49<10:36,  1.67it/s]
 16%|█▌        | 202/1261 [01:50<10:11,  1.73it/s]
 16%|█▌        | 203/1261 [01:50<09:56,  1.77it/s]
 16%|█▌        | 204/1261 [01:51<10:16,  1.72it/s]
 16%|█▋        | 205/1261 [01:51<10:20,  1.70it/s]
 16%|█▋        | 206/1261 [01:52<09:56,  1.77it/s]
 16%|█▋        | 207/1261 [01:53<10:28,  1.68it/s]
 16%|█▋        | 208/1261 [01:53<10:02,  1.75it/s]
 17%|█▋        | 209/1261 [01:54<10:11,  1.72it/s]
 17%|█▋        | 210/1261 [01:54<10:38,  1.65it/s]
 17%|█▋        | 211/1261 [01:55<10:18,  1.70it/s]
 17%|█▋        | 212/1261 [01:56<10:32,  1.66it/s]
 17%|█▋        | 213/1261 [01:56<10:31,  1.66it/s]
 17%|█▋        | 214/1261 [01:57<10:37,  1.64it/s]
 17%|█▋        | 215/1261 [01:57<10:33,  1.65it/s]
 17%|█▋        | 216/1261 [01:58<11:03,  1.57it/s]
 17%|█▋        | 217/1261 [02:00<16:48,  1.03it/s]
 17%|█▋        | 218/1261 [02:01<15:51,  1.10it/s]
 17%|█▋        | 219/1261 [02:01<14:46,  1.18it/s]
 17%|█▋        | 220/1261 [02:02<14:09,  1.22it/s]
 18%|█▊        | 221/1261 [02:03<12:38,  1.37it/s]
 18%|█▊        | 222/1261 [02:03<11:56,  1.45it/s]
 18%|█▊        | 223/1261 [02:04<11:00,  1.57it/s]
 18%|█▊        | 224/1261 [02:04<10:54,  1.59it/s]
 18%|█▊        | 225/1261 [02:05<10:51,  1.59it/s]
 18%|█▊        | 226/1261 [02:05<10:23,  1.66it/s]
 18%|█▊        | 227/1261 [02:06<10:44,  1.60it/s]
 18%|█▊        | 228/1261 [02:07<10:55,  1.58it/s]
 18%|█▊        | 229/1261 [02:08<11:21,  1.52it/s]
 18%|█▊        | 230/1261 [02:08<10:30,  1.63it/s]
 18%|█▊        | 231/1261 [02:09<10:49,  1.59it/s]
 18%|█▊        | 232/1261 [02:09<10:32,  1.63it/s]
 18%|█▊        | 233/1261 [02:10<10:50,  1.58it/s]
 19%|█▊        | 234/1261 [02:11<10:37,  1.61it/s]
 19%|█▊        | 235/1261 [02:11<10:18,  1.66it/s]
 19%|█▊        | 236/1261 [02:12<10:20,  1.65it/s]
 19%|█▉        | 237/1261 [02:12<09:51,  1.73it/s]
 19%|█▉        | 238/1261 [02:13<10:00,  1.70it/s]
 19%|█▉        | 239/1261 [02:13<09:42,  1.75it/s]
 19%|█▉        | 240/1261 [02:14<09:48,  1.74it/s]
 19%|█▉        | 241/1261 [02:15<09:45,  1.74it/s]
 19%|█▉        | 242/1261 [02:15<09:24,  1.80it/s]
 19%|█▉        | 243/1261 [02:16<09:56,  1.71it/s]
 19%|█▉        | 244/1261 [02:16<09:46,  1.73it/s]
 19%|█▉        | 245/1261 [02:17<09:48,  1.73it/s]
 20%|█▉        | 246/1261 [02:17<09:44,  1.74it/s]
 20%|█▉        | 247/1261 [02:18<09:27,  1.79it/s]
 20%|█▉        | 248/1261 [02:19<10:04,  1.68it/s]
 20%|█▉        | 249/1261 [02:19<09:39,  1.75it/s]
 20%|█▉        | 250/1261 [02:20<09:43,  1.73it/s]
 20%|█▉        | 251/1261 [02:20<09:28,  1.78it/s]
 20%|█▉        | 252/1261 [02:21<09:15,  1.81it/s]
 20%|██        | 253/1261 [02:22<11:28,  1.46it/s]
 20%|██        | 254/1261 [02:23<12:26,  1.35it/s]
 20%|██        | 255/1261 [02:23<12:39,  1.32it/s]
 20%|██        | 256/1261 [02:24<13:25,  1.25it/s]
 20%|██        | 257/1261 [02:25<12:56,  1.29it/s]
 20%|██        | 258/1261 [02:26<13:40,  1.22it/s]
 21%|██        | 259/1261 [02:27<13:15,  1.26it/s]
 21%|██        | 260/1261 [02:27<13:02,  1.28it/s]
 21%|██        | 261/1261 [02:28<13:04,  1.27it/s]
 21%|██        | 262/1261 [02:29<12:42,  1.31it/s]
 21%|██        | 263/1261 [02:30<12:39,  1.31it/s]
 21%|██        | 264/1261 [02:30<12:50,  1.29it/s]
 21%|██        | 265/1261 [02:31<12:41,  1.31it/s]
 21%|██        | 266/1261 [02:32<12:20,  1.34it/s]
 21%|██        | 267/1261 [02:33<12:04,  1.37it/s]
 21%|██▏       | 268/1261 [02:33<12:16,  1.35it/s]
 21%|██▏       | 269/1261 [02:34<12:00,  1.38it/s]
 21%|██▏       | 270/1261 [02:35<12:00,  1.38it/s]
 21%|██▏       | 271/1261 [02:36<12:27,  1.32it/s]
 22%|██▏       | 272/1261 [02:37<13:11,  1.25it/s]
 22%|██▏       | 273/1261 [02:37<13:00,  1.27it/s]
 22%|██▏       | 274/1261 [02:38<12:36,  1.30it/s]
 22%|██▏       | 275/1261 [02:39<12:28,  1.32it/s]
 22%|██▏       | 276/1261 [02:40<12:56,  1.27it/s]
 22%|██▏       | 277/1261 [02:40<12:29,  1.31it/s]
 22%|██▏       | 278/1261 [02:41<12:03,  1.36it/s]
 22%|██▏       | 279/1261 [02:42<12:05,  1.35it/s]
 22%|██▏       | 280/1261 [02:42<12:05,  1.35it/s]
 22%|██▏       | 281/1261 [02:43<12:05,  1.35it/s]
 22%|██▏       | 282/1261 [02:44<12:30,  1.30it/s]
 22%|██▏       | 283/1261 [02:45<12:22,  1.32it/s]
 23%|██▎       | 284/1261 [02:46<12:22,  1.31it/s]
 23%|██▎       | 285/1261 [02:46<12:18,  1.32it/s]
 23%|██▎       | 286/1261 [02:47<11:59,  1.35it/s]
 23%|██▎       | 287/1261 [02:48<11:54,  1.36it/s]
 23%|██▎       | 288/1261 [02:49<12:14,  1.32it/s]
 23%|██▎       | 289/1261 [02:49<12:08,  1.33it/s]
 23%|██▎       | 290/1261 [02:50<12:14,  1.32it/s]
 23%|██▎       | 291/1261 [02:51<12:18,  1.31it/s]
 23%|██▎       | 292/1261 [02:52<12:00,  1.34it/s]
 23%|██▎       | 293/1261 [02:53<14:25,  1.12it/s]
 23%|██▎       | 294/1261 [02:54<13:54,  1.16it/s]
 23%|██▎       | 295/1261 [02:54<13:24,  1.20it/s]
 23%|██▎       | 296/1261 [02:55<12:42,  1.27it/s]
 24%|██▎       | 297/1261 [02:56<12:26,  1.29it/s]
 24%|██▎       | 298/1261 [02:56<12:17,  1.31it/s]
 24%|██▎       | 299/1261 [02:57<12:06,  1.32it/s]
 24%|██▍       | 300/1261 [02:58<11:51,  1.35it/s]
 24%|██▍       | 301/1261 [02:59<11:55,  1.34it/s]
 24%|██▍       | 302/1261 [02:59<11:52,  1.35it/s]
 24%|██▍       | 303/1261 [03:00<11:47,  1.35it/s]
 24%|██▍       | 304/1261 [03:01<12:49,  1.24it/s]
 24%|██▍       | 305/1261 [03:02<12:19,  1.29it/s]
 24%|██▍       | 306/1261 [03:03<12:19,  1.29it/s]
 24%|██▍       | 307/1261 [03:03<12:18,  1.29it/s]
 24%|██▍       | 308/1261 [03:04<12:09,  1.31it/s]
 25%|██▍       | 309/1261 [03:05<11:48,  1.34it/s]
 25%|██▍       | 310/1261 [03:06<11:44,  1.35it/s]
 25%|██▍       | 311/1261 [03:06<11:42,  1.35it/s]
 25%|██▍       | 312/1261 [03:07<11:35,  1.36it/s]
 25%|██▍       | 313/1261 [03:08<11:40,  1.35it/s]
 25%|██▍       | 314/1261 [03:09<11:53,  1.33it/s]
 25%|██▍       | 315/1261 [03:09<11:39,  1.35it/s]
 25%|██▌       | 316/1261 [03:10<11:34,  1.36it/s]
 25%|██▌       | 317/1261 [03:11<11:44,  1.34it/s]
 25%|██▌       | 318/1261 [03:11<11:42,  1.34it/s]
 25%|██▌       | 319/1261 [03:12<11:48,  1.33it/s]
 25%|██▌       | 320/1261 [03:13<11:28,  1.37it/s]
 25%|██▌       | 321/1261 [03:14<11:21,  1.38it/s]
 26%|██▌       | 322/1261 [03:14<11:28,  1.36it/s]
 26%|██▌       | 323/1261 [03:15<11:22,  1.37it/s]
 26%|██▌       | 324/1261 [03:16<11:17,  1.38it/s]
 26%|██▌       | 325/1261 [03:17<11:17,  1.38it/s]
 26%|██▌       | 326/1261 [03:17<11:38,  1.34it/s]
 26%|██▌       | 327/1261 [03:18<11:24,  1.36it/s]
 26%|██▌       | 328/1261 [03:19<11:28,  1.36it/s]
 26%|██▌       | 329/1261 [03:20<11:35,  1.34it/s]
 26%|██▌       | 330/1261 [03:20<11:37,  1.33it/s]
 26%|██▌       | 331/1261 [03:21<11:45,  1.32it/s]
 26%|██▋       | 332/1261 [03:22<11:39,  1.33it/s]
 26%|██▋       | 333/1261 [03:23<11:31,  1.34it/s]
 26%|██▋       | 334/1261 [03:23<11:40,  1.32it/s]
 27%|██▋       | 335/1261 [03:24<11:46,  1.31it/s]
 27%|██▋       | 336/1261 [03:25<11:41,  1.32it/s]
 27%|██▋       | 337/1261 [03:26<11:34,  1.33it/s]
 27%|██▋       | 338/1261 [03:26<11:27,  1.34it/s]
 27%|██▋       | 339/1261 [03:27<11:26,  1.34it/s]
 27%|██▋       | 340/1261 [03:28<11:17,  1.36it/s]
 27%|██▋       | 341/1261 [03:29<11:17,  1.36it/s]
 27%|██▋       | 342/1261 [03:29<11:05,  1.38it/s]
 27%|██▋       | 343/1261 [03:30<11:06,  1.38it/s]
 27%|██▋       | 344/1261 [03:31<11:03,  1.38it/s]
 27%|██▋       | 345/1261 [03:31<11:02,  1.38it/s]
 27%|██▋       | 346/1261 [03:32<11:17,  1.35it/s]
 28%|██▊       | 347/1261 [03:33<11:25,  1.33it/s]
 28%|██▊       | 348/1261 [03:34<11:10,  1.36it/s]
 28%|██▊       | 349/1261 [03:34<11:15,  1.35it/s]
 28%|██▊       | 350/1261 [03:35<11:09,  1.36it/s]
 28%|██▊       | 351/1261 [03:36<11:11,  1.36it/s]
 28%|██▊       | 352/1261 [03:37<11:12,  1.35it/s]
 28%|██▊       | 353/1261 [03:37<11:14,  1.35it/s]
 28%|██▊       | 354/1261 [03:38<11:22,  1.33it/s]
 28%|██▊       | 355/1261 [03:39<11:22,  1.33it/s]
 28%|██▊       | 356/1261 [03:40<11:09,  1.35it/s]
 28%|██▊       | 357/1261 [03:40<11:11,  1.35it/s]
 28%|██▊       | 358/1261 [03:41<11:15,  1.34it/s]
 28%|██▊       | 359/1261 [03:42<11:16,  1.33it/s]
 29%|██▊       | 360/1261 [03:43<11:10,  1.34it/s]
 29%|██▊       | 361/1261 [03:43<11:02,  1.36it/s]
 29%|██▊       | 362/1261 [03:44<11:00,  1.36it/s]
 29%|██▉       | 363/1261 [03:45<11:04,  1.35it/s]
 29%|██▉       | 364/1261 [03:46<10:58,  1.36it/s]
 29%|██▉       | 365/1261 [03:46<10:54,  1.37it/s]
 29%|██▉       | 366/1261 [03:47<11:13,  1.33it/s]
 29%|██▉       | 367/1261 [03:48<11:10,  1.33it/s]
 29%|██▉       | 368/1261 [03:49<11:12,  1.33it/s]
 29%|██▉       | 369/1261 [03:49<11:07,  1.34it/s]
 29%|██▉       | 370/1261 [03:50<11:04,  1.34it/s]
 29%|██▉       | 371/1261 [03:51<11:07,  1.33it/s]
 30%|██▉       | 372/1261 [03:52<11:11,  1.32it/s]
 30%|██▉       | 373/1261 [03:52<11:06,  1.33it/s]
 30%|██▉       | 374/1261 [03:53<11:05,  1.33it/s]
 30%|██▉       | 375/1261 [03:54<11:33,  1.28it/s]
 30%|██▉       | 376/1261 [03:55<11:45,  1.25it/s]
 30%|██▉       | 377/1261 [03:55<11:26,  1.29it/s]
 30%|██▉       | 378/1261 [03:56<11:24,  1.29it/s]
 30%|███       | 379/1261 [03:57<10:55,  1.34it/s]
 30%|███       | 380/1261 [03:58<11:05,  1.32it/s]
 30%|███       | 381/1261 [03:58<11:01,  1.33it/s]
 30%|███       | 382/1261 [03:59<10:58,  1.33it/s]
 30%|███       | 383/1261 [04:00<10:39,  1.37it/s]
 30%|███       | 384/1261 [04:01<10:28,  1.40it/s]
 31%|███       | 385/1261 [04:01<10:23,  1.41it/s]
 31%|███       | 386/1261 [04:02<10:30,  1.39it/s]
 31%|███       | 387/1261 [04:03<10:30,  1.39it/s]
 31%|███       | 388/1261 [04:03<10:32,  1.38it/s]
 31%|███       | 389/1261 [04:04<10:33,  1.38it/s]
 31%|███       | 390/1261 [04:05<10:21,  1.40it/s]
 31%|███       | 391/1261 [04:06<10:22,  1.40it/s]
 31%|███       | 392/1261 [04:06<10:21,  1.40it/s]
 31%|███       | 393/1261 [04:07<10:32,  1.37it/s]
 31%|███       | 394/1261 [04:08<10:37,  1.36it/s]
 31%|███▏      | 395/1261 [04:09<10:46,  1.34it/s]
 31%|███▏      | 396/1261 [04:09<10:51,  1.33it/s]
 31%|███▏      | 397/1261 [04:10<10:29,  1.37it/s]
 32%|███▏      | 398/1261 [04:11<10:43,  1.34it/s]
 32%|███▏      | 399/1261 [04:12<10:44,  1.34it/s]
 32%|███▏      | 400/1261 [04:12<10:39,  1.35it/s]
 32%|███▏      | 401/1261 [04:13<10:29,  1.37it/s]
 32%|███▏      | 402/1261 [04:14<10:41,  1.34it/s]
 32%|███▏      | 403/1261 [04:14<10:33,  1.35it/s]
 32%|███▏      | 404/1261 [04:15<10:12,  1.40it/s]
 32%|███▏      | 405/1261 [04:16<10:11,  1.40it/s]
 32%|███▏      | 406/1261 [04:17<10:12,  1.40it/s]
 32%|███▏      | 407/1261 [04:17<09:57,  1.43it/s]
 32%|███▏      | 408/1261 [04:18<10:07,  1.40it/s]
 32%|███▏      | 409/1261 [04:19<10:17,  1.38it/s]
 33%|███▎      | 410/1261 [04:19<10:21,  1.37it/s]
 33%|███▎      | 411/1261 [04:20<10:27,  1.35it/s]
 33%|███▎      | 412/1261 [04:21<10:16,  1.38it/s]
 33%|███▎      | 413/1261 [04:22<10:12,  1.38it/s]
 33%|███▎      | 414/1261 [04:22<10:38,  1.33it/s]
 33%|███▎      | 415/1261 [04:23<10:27,  1.35it/s]
 33%|███▎      | 416/1261 [04:24<10:21,  1.36it/s]
 33%|███▎      | 417/1261 [04:25<10:20,  1.36it/s]
 33%|███▎      | 418/1261 [04:25<10:15,  1.37it/s]
 33%|███▎      | 419/1261 [04:26<10:15,  1.37it/s]
 33%|███▎      | 420/1261 [04:27<10:08,  1.38it/s]
 33%|███▎      | 421/1261 [04:28<10:19,  1.36it/s]
 33%|███▎      | 422/1261 [04:28<10:14,  1.37it/s]
 34%|███▎      | 423/1261 [04:29<10:39,  1.31it/s]
 34%|███▎      | 424/1261 [04:30<10:26,  1.34it/s]
 34%|███▎      | 425/1261 [04:31<10:21,  1.35it/s]
 34%|███▍      | 426/1261 [04:31<10:09,  1.37it/s]
 34%|███▍      | 427/1261 [04:32<09:56,  1.40it/s]
 34%|███▍      | 428/1261 [04:33<09:57,  1.40it/s]
 34%|███▍      | 429/1261 [04:33<10:10,  1.36it/s]
 34%|███▍      | 430/1261 [04:34<10:14,  1.35it/s]
 34%|███▍      | 431/1261 [04:35<10:10,  1.36it/s]
 34%|███▍      | 432/1261 [04:36<10:32,  1.31it/s]
 34%|███▍      | 433/1261 [04:36<10:29,  1.32it/s]
 34%|███▍      | 434/1261 [04:37<10:30,  1.31it/s]
 34%|███▍      | 435/1261 [04:38<10:31,  1.31it/s]
 35%|███▍      | 436/1261 [04:39<10:19,  1.33it/s]
 35%|███▍      | 437/1261 [04:39<10:14,  1.34it/s]
 35%|███▍      | 438/1261 [04:40<10:14,  1.34it/s]
 35%|███▍      | 439/1261 [04:41<10:04,  1.36it/s]
 35%|███▍      | 440/1261 [04:42<10:13,  1.34it/s]
 35%|███▍      | 441/1261 [04:43<10:30,  1.30it/s]
 35%|███▌      | 442/1261 [04:43<10:27,  1.30it/s]
 35%|███▌      | 443/1261 [04:44<10:15,  1.33it/s]
 35%|███▌      | 444/1261 [04:45<10:12,  1.33it/s]
 35%|███▌      | 445/1261 [04:45<10:09,  1.34it/s]
 35%|███▌      | 446/1261 [04:46<10:15,  1.32it/s]
 35%|███▌      | 447/1261 [04:47<10:17,  1.32it/s]
 36%|███▌      | 448/1261 [04:48<10:12,  1.33it/s]
 36%|███▌      | 449/1261 [04:49<10:06,  1.34it/s]
 36%|███▌      | 450/1261 [04:49<10:12,  1.32it/s]
 36%|███▌      | 451/1261 [04:50<10:02,  1.34it/s]
 36%|███▌      | 452/1261 [04:51<10:01,  1.35it/s]
 36%|███▌      | 453/1261 [04:52<10:14,  1.31it/s]
 36%|███▌      | 454/1261 [04:52<10:06,  1.33it/s]
 36%|███▌      | 455/1261 [04:53<10:00,  1.34it/s]
 36%|███▌      | 456/1261 [04:54<10:13,  1.31it/s]
 36%|███▌      | 457/1261 [04:55<10:06,  1.33it/s]
 36%|███▋      | 458/1261 [04:55<10:16,  1.30it/s]
 36%|███▋      | 459/1261 [04:56<10:21,  1.29it/s]
 36%|███▋      | 460/1261 [04:57<09:55,  1.35it/s]
 37%|███▋      | 461/1261 [04:58<09:58,  1.34it/s]
 37%|███▋      | 462/1261 [04:58<09:57,  1.34it/s]
 37%|███▋      | 463/1261 [04:59<09:57,  1.33it/s]
 37%|███▋      | 464/1261 [05:00<10:00,  1.33it/s]
 37%|███▋      | 465/1261 [05:01<09:57,  1.33it/s]
 37%|███▋      | 466/1261 [05:01<09:59,  1.33it/s]
 37%|███▋      | 467/1261 [05:02<09:56,  1.33it/s]
 37%|███▋      | 468/1261 [05:03<09:48,  1.35it/s]
 37%|███▋      | 469/1261 [05:04<09:50,  1.34it/s]
 37%|███▋      | 470/1261 [05:04<09:54,  1.33it/s]
 37%|███▋      | 471/1261 [05:05<09:45,  1.35it/s]
 37%|███▋      | 472/1261 [05:06<09:56,  1.32it/s]
 38%|███▊      | 473/1261 [05:07<10:02,  1.31it/s]
 38%|███▊      | 474/1261 [05:07<09:54,  1.32it/s]
 38%|███▊      | 475/1261 [05:08<09:56,  1.32it/s]
 38%|███▊      | 476/1261 [05:09<10:04,  1.30it/s]
 38%|███▊      | 477/1261 [05:10<09:59,  1.31it/s]
 38%|███▊      | 478/1261 [05:10<09:53,  1.32it/s]
 38%|███▊      | 479/1261 [05:11<09:56,  1.31it/s]
 38%|███▊      | 480/1261 [05:12<10:10,  1.28it/s]
 38%|███▊      | 481/1261 [05:13<09:59,  1.30it/s]
 38%|███▊      | 482/1261 [05:14<10:39,  1.22it/s]
 38%|███▊      | 483/1261 [05:14<10:19,  1.26it/s]
 38%|███▊      | 484/1261 [05:15<10:27,  1.24it/s]
 38%|███▊      | 485/1261 [05:16<10:35,  1.22it/s]
 39%|███▊      | 486/1261 [05:17<10:24,  1.24it/s]
 39%|███▊      | 487/1261 [05:18<10:07,  1.27it/s]
 39%|███▊      | 488/1261 [05:18<10:10,  1.27it/s]
 39%|███▉      | 489/1261 [05:19<10:07,  1.27it/s]
 39%|███▉      | 490/1261 [05:20<09:53,  1.30it/s]
 39%|███▉      | 491/1261 [05:21<09:44,  1.32it/s]
 39%|███▉      | 492/1261 [05:21<09:39,  1.33it/s]
 39%|███▉      | 493/1261 [05:22<09:47,  1.31it/s]
 39%|███▉      | 494/1261 [05:23<09:37,  1.33it/s]
 39%|███▉      | 495/1261 [05:24<09:39,  1.32it/s]
 39%|███▉      | 496/1261 [05:24<09:34,  1.33it/s]
 39%|███▉      | 497/1261 [05:25<09:31,  1.34it/s]
 39%|███▉      | 498/1261 [05:26<09:28,  1.34it/s]
 40%|███▉      | 499/1261 [05:27<09:38,  1.32it/s]
 40%|███▉      | 500/1261 [05:27<09:20,  1.36it/s]
 40%|███▉      | 501/1261 [05:28<09:12,  1.38it/s]
 40%|███▉      | 502/1261 [05:29<09:18,  1.36it/s]
 40%|███▉      | 503/1261 [05:30<09:23,  1.35it/s]
 40%|███▉      | 504/1261 [05:30<09:13,  1.37it/s]
 40%|████      | 505/1261 [05:31<09:07,  1.38it/s]
 40%|████      | 506/1261 [05:32<09:30,  1.32it/s]
 40%|████      | 507/1261 [05:33<09:25,  1.33it/s]
 40%|████      | 508/1261 [05:33<09:22,  1.34it/s]
 40%|████      | 509/1261 [05:34<09:22,  1.34it/s]
 40%|████      | 510/1261 [05:35<09:25,  1.33it/s]
 41%|████      | 511/1261 [05:36<09:19,  1.34it/s]
 41%|████      | 512/1261 [05:36<09:28,  1.32it/s]
 41%|████      | 513/1261 [05:37<09:28,  1.32it/s]
 41%|████      | 514/1261 [05:38<09:25,  1.32it/s]
 41%|████      | 515/1261 [05:39<09:18,  1.34it/s]
 41%|████      | 516/1261 [05:39<09:08,  1.36it/s]
 41%|████      | 517/1261 [05:40<09:10,  1.35it/s]
 41%|████      | 518/1261 [05:41<09:16,  1.34it/s]
 41%|████      | 519/1261 [05:42<09:10,  1.35it/s]
 41%|████      | 520/1261 [05:42<09:06,  1.36it/s]
 41%|████▏     | 521/1261 [05:43<08:55,  1.38it/s]
 41%|████▏     | 522/1261 [05:44<09:02,  1.36it/s]
 41%|████▏     | 523/1261 [05:44<09:11,  1.34it/s]
 42%|████▏     | 524/1261 [05:45<09:08,  1.34it/s]
 42%|████▏     | 525/1261 [05:46<09:05,  1.35it/s]
 42%|████▏     | 526/1261 [05:47<09:11,  1.33it/s]
 42%|████▏     | 527/1261 [05:47<09:09,  1.34it/s]
 42%|████▏     | 528/1261 [05:48<08:51,  1.38it/s]
 42%|████▏     | 529/1261 [05:49<08:50,  1.38it/s]
 42%|████▏     | 530/1261 [05:50<08:59,  1.35it/s]
 42%|████▏     | 531/1261 [05:50<08:50,  1.38it/s]
 42%|████▏     | 532/1261 [05:51<08:39,  1.40it/s]
 42%|████▏     | 533/1261 [05:52<08:42,  1.39it/s]
 42%|████▏     | 534/1261 [05:53<08:53,  1.36it/s]
 42%|████▏     | 535/1261 [05:53<08:51,  1.37it/s]
 43%|████▎     | 536/1261 [05:54<08:59,  1.34it/s]
 43%|████▎     | 537/1261 [05:55<08:45,  1.38it/s]
 43%|████▎     | 538/1261 [05:55<08:56,  1.35it/s]
 43%|████▎     | 539/1261 [05:56<08:56,  1.35it/s]
 43%|████▎     | 540/1261 [05:57<08:50,  1.36it/s]
 43%|████▎     | 541/1261 [05:58<08:55,  1.34it/s]
 43%|████▎     | 542/1261 [05:59<09:09,  1.31it/s]
 43%|████▎     | 543/1261 [05:59<09:09,  1.31it/s]
 43%|████▎     | 544/1261 [06:00<08:53,  1.34it/s]
 43%|████▎     | 545/1261 [06:01<08:58,  1.33it/s]
 43%|████▎     | 546/1261 [06:01<08:52,  1.34it/s]
 43%|████▎     | 547/1261 [06:02<08:51,  1.34it/s]
 43%|████▎     | 548/1261 [06:03<08:56,  1.33it/s]
 44%|████▎     | 549/1261 [06:04<08:56,  1.33it/s]
 44%|████▎     | 550/1261 [06:05<08:59,  1.32it/s]
 44%|████▎     | 551/1261 [06:05<08:51,  1.34it/s]
 44%|████▍     | 552/1261 [06:06<08:51,  1.34it/s]
 44%|████▍     | 553/1261 [06:07<08:51,  1.33it/s]
 44%|████▍     | 554/1261 [06:07<08:38,  1.36it/s]
 44%|████▍     | 555/1261 [06:08<08:46,  1.34it/s]
 44%|████▍     | 556/1261 [06:09<08:44,  1.34it/s]
 44%|████▍     | 557/1261 [06:10<08:42,  1.35it/s]
 44%|████▍     | 558/1261 [06:10<08:39,  1.35it/s]
 44%|████▍     | 559/1261 [06:11<08:31,  1.37it/s]
 44%|████▍     | 560/1261 [06:12<08:36,  1.36it/s]
 44%|████▍     | 561/1261 [06:13<08:33,  1.36it/s]
 45%|████▍     | 562/1261 [06:13<08:28,  1.37it/s]
 45%|████▍     | 563/1261 [06:14<08:23,  1.38it/s]
 45%|████▍     | 564/1261 [06:15<08:38,  1.34it/s]
 45%|████▍     | 565/1261 [06:16<08:35,  1.35it/s]
 45%|████▍     | 566/1261 [06:16<08:34,  1.35it/s]
 45%|████▍     | 567/1261 [06:17<08:34,  1.35it/s]
 45%|████▌     | 568/1261 [06:18<08:35,  1.34it/s]
 45%|████▌     | 569/1261 [06:19<08:27,  1.36it/s]
 45%|████▌     | 570/1261 [06:19<08:28,  1.36it/s]
 45%|████▌     | 571/1261 [06:20<08:19,  1.38it/s]
 45%|████▌     | 572/1261 [06:21<08:37,  1.33it/s]
 45%|████▌     | 573/1261 [06:21<08:19,  1.38it/s]
 46%|████▌     | 574/1261 [06:22<08:19,  1.37it/s]
 46%|████▌     | 575/1261 [06:23<08:20,  1.37it/s]
 46%|████▌     | 576/1261 [06:24<08:16,  1.38it/s]
 46%|████▌     | 577/1261 [06:24<08:10,  1.39it/s]
 46%|████▌     | 578/1261 [06:25<08:24,  1.35it/s]
 46%|████▌     | 579/1261 [06:26<08:17,  1.37it/s]
 46%|████▌     | 580/1261 [06:27<08:15,  1.38it/s]
 46%|████▌     | 581/1261 [06:27<08:21,  1.36it/s]
 46%|████▌     | 582/1261 [06:28<08:14,  1.37it/s]
 46%|████▌     | 583/1261 [06:29<08:17,  1.36it/s]
 46%|████▋     | 584/1261 [06:30<08:23,  1.34it/s]
 46%|████▋     | 585/1261 [06:30<08:22,  1.35it/s]
 46%|████▋     | 586/1261 [06:31<08:09,  1.38it/s]
 47%|████▋     | 587/1261 [06:32<08:11,  1.37it/s]
 47%|████▋     | 588/1261 [06:32<08:18,  1.35it/s]
 47%|████▋     | 589/1261 [06:33<08:17,  1.35it/s]
 47%|████▋     | 590/1261 [06:34<08:13,  1.36it/s]
 47%|████▋     | 591/1261 [06:35<08:13,  1.36it/s]
 47%|████▋     | 592/1261 [06:35<08:25,  1.32it/s]
 47%|████▋     | 593/1261 [06:36<08:26,  1.32it/s]
 47%|████▋     | 594/1261 [06:37<08:12,  1.35it/s]
 47%|████▋     | 595/1261 [06:38<08:07,  1.37it/s]
 47%|████▋     | 596/1261 [06:38<08:12,  1.35it/s]
 47%|████▋     | 597/1261 [06:39<08:10,  1.35it/s]
 47%|████▋     | 598/1261 [06:40<08:57,  1.23it/s]
 48%|████▊     | 599/1261 [06:41<09:00,  1.22it/s]
 48%|████▊     | 600/1261 [06:42<09:35,  1.15it/s]
 48%|████▊     | 601/1261 [06:43<09:04,  1.21it/s]
 48%|████▊     | 602/1261 [06:43<08:43,  1.26it/s]
 48%|████▊     | 603/1261 [06:44<08:35,  1.28it/s]
 48%|████▊     | 604/1261 [06:45<08:16,  1.32it/s]
 48%|████▊     | 605/1261 [06:46<08:16,  1.32it/s]
 48%|████▊     | 606/1261 [06:46<08:12,  1.33it/s]
 48%|████▊     | 607/1261 [06:47<08:08,  1.34it/s]
 48%|████▊     | 608/1261 [06:48<07:58,  1.36it/s]
 48%|████▊     | 609/1261 [06:48<07:55,  1.37it/s]
 48%|████▊     | 610/1261 [06:49<08:03,  1.35it/s]
 48%|████▊     | 611/1261 [06:50<07:54,  1.37it/s]
 49%|████▊     | 612/1261 [06:51<08:01,  1.35it/s]
 49%|████▊     | 613/1261 [06:51<07:57,  1.36it/s]
 49%|████▊     | 614/1261 [06:52<08:00,  1.35it/s]
 49%|████▉     | 615/1261 [06:53<07:55,  1.36it/s]
 49%|████▉     | 616/1261 [06:54<07:54,  1.36it/s]
 49%|████▉     | 617/1261 [06:54<07:54,  1.36it/s]
 49%|████▉     | 618/1261 [06:55<07:59,  1.34it/s]
 49%|████▉     | 619/1261 [06:56<07:58,  1.34it/s]
 49%|████▉     | 620/1261 [06:57<08:09,  1.31it/s]
 49%|████▉     | 621/1261 [06:57<07:59,  1.34it/s]
 49%|████▉     | 622/1261 [06:58<07:46,  1.37it/s]
 49%|████▉     | 623/1261 [06:59<07:49,  1.36it/s]
 49%|████▉     | 624/1261 [07:00<07:56,  1.34it/s]
 50%|████▉     | 625/1261 [07:00<07:57,  1.33it/s]
 50%|████▉     | 626/1261 [07:01<07:59,  1.33it/s]
 50%|████▉     | 627/1261 [07:02<07:57,  1.33it/s]
 50%|████▉     | 628/1261 [07:03<07:59,  1.32it/s]
 50%|████▉     | 629/1261 [07:03<07:48,  1.35it/s]
 50%|████▉     | 630/1261 [07:04<07:49,  1.34it/s]
 50%|█████     | 631/1261 [07:05<07:47,  1.35it/s]
 50%|█████     | 632/1261 [07:06<07:47,  1.34it/s]
 50%|█████     | 633/1261 [07:06<07:46,  1.35it/s]
 50%|█████     | 634/1261 [07:07<07:51,  1.33it/s]
 50%|█████     | 635/1261 [07:08<07:41,  1.36it/s]
 50%|█████     | 636/1261 [07:09<07:38,  1.36it/s]
 51%|█████     | 637/1261 [07:09<07:43,  1.34it/s]
 51%|█████     | 638/1261 [07:10<07:33,  1.37it/s]
 51%|█████     | 639/1261 [07:11<07:35,  1.37it/s]
 51%|█████     | 640/1261 [07:12<07:44,  1.34it/s]
 51%|█████     | 641/1261 [07:12<07:42,  1.34it/s]
 51%|█████     | 642/1261 [07:13<07:41,  1.34it/s]
 51%|█████     | 643/1261 [07:14<07:26,  1.39it/s]
 51%|█████     | 644/1261 [07:14<07:37,  1.35it/s]
 51%|█████     | 645/1261 [07:15<07:39,  1.34it/s]
 51%|█████     | 646/1261 [07:16<07:36,  1.35it/s]
 51%|█████▏    | 647/1261 [07:17<07:39,  1.34it/s]
 51%|█████▏    | 648/1261 [07:17<07:39,  1.33it/s]
 51%|█████▏    | 649/1261 [07:18<07:32,  1.35it/s]
 52%|█████▏    | 650/1261 [07:19<07:27,  1.36it/s]
 52%|█████▏    | 651/1261 [07:20<07:28,  1.36it/s]
 52%|█████▏    | 652/1261 [07:20<07:33,  1.34it/s]
 52%|█████▏    | 653/1261 [07:21<07:24,  1.37it/s]
 52%|█████▏    | 654/1261 [07:22<07:37,  1.33it/s]
 52%|█████▏    | 655/1261 [07:23<07:51,  1.29it/s]
 52%|█████▏    | 656/1261 [07:24<08:07,  1.24it/s]
 52%|█████▏    | 657/1261 [07:24<07:54,  1.27it/s]
 52%|█████▏    | 658/1261 [07:25<07:54,  1.27it/s]
 52%|█████▏    | 659/1261 [07:26<07:45,  1.29it/s]
 52%|█████▏    | 660/1261 [07:27<07:41,  1.30it/s]
 52%|█████▏    | 661/1261 [07:27<07:34,  1.32it/s]
 52%|█████▏    | 662/1261 [07:28<07:35,  1.32it/s]
 53%|█████▎    | 663/1261 [07:29<07:41,  1.30it/s]
 53%|█████▎    | 664/1261 [07:30<07:30,  1.32it/s]
 53%|█████▎    | 665/1261 [07:30<07:30,  1.32it/s]
 53%|█████▎    | 666/1261 [07:31<07:33,  1.31it/s]
 53%|█████▎    | 667/1261 [07:32<07:42,  1.28it/s]
 53%|█████▎    | 668/1261 [07:33<07:24,  1.33it/s]
 53%|█████▎    | 669/1261 [07:33<07:24,  1.33it/s]
 53%|█████▎    | 670/1261 [07:34<07:23,  1.33it/s]
 53%|█████▎    | 671/1261 [07:35<07:30,  1.31it/s]
 53%|█████▎    | 672/1261 [07:36<07:31,  1.31it/s]
 53%|█████▎    | 673/1261 [07:37<07:41,  1.28it/s]
 53%|█████▎    | 674/1261 [07:37<07:34,  1.29it/s]
 54%|█████▎    | 675/1261 [07:38<07:54,  1.24it/s]
 54%|█████▎    | 676/1261 [07:39<07:37,  1.28it/s]
 54%|█████▎    | 677/1261 [07:40<07:50,  1.24it/s]
 54%|█████▍    | 678/1261 [07:41<07:58,  1.22it/s]
 54%|█████▍    | 679/1261 [07:42<08:00,  1.21it/s]
 54%|█████▍    | 680/1261 [07:42<07:56,  1.22it/s]
 54%|█████▍    | 681/1261 [07:43<07:57,  1.22it/s]
 54%|█████▍    | 682/1261 [07:44<07:37,  1.26it/s]
 54%|█████▍    | 683/1261 [07:45<07:23,  1.30it/s]
 54%|█████▍    | 684/1261 [07:45<07:21,  1.31it/s]
 54%|█████▍    | 685/1261 [07:46<07:20,  1.31it/s]
 54%|█████▍    | 686/1261 [07:47<07:23,  1.30it/s]
 54%|█████▍    | 687/1261 [07:48<07:21,  1.30it/s]
 55%|█████▍    | 688/1261 [07:48<07:26,  1.28it/s]
 55%|█████▍    | 689/1261 [07:49<07:24,  1.29it/s]
 55%|█████▍    | 690/1261 [07:50<07:14,  1.32it/s]
 55%|█████▍    | 691/1261 [07:51<07:13,  1.31it/s]
 55%|█████▍    | 692/1261 [07:51<07:15,  1.31it/s]
 55%|█████▍    | 693/1261 [07:52<07:15,  1.31it/s]
 55%|█████▌    | 694/1261 [07:53<07:12,  1.31it/s]
 55%|█████▌    | 695/1261 [07:54<07:39,  1.23it/s]
 55%|█████▌    | 696/1261 [07:55<07:38,  1.23it/s]
 55%|█████▌    | 697/1261 [07:56<07:37,  1.23it/s]
 55%|█████▌    | 698/1261 [07:56<07:32,  1.25it/s]
 55%|█████▌    | 699/1261 [07:57<07:19,  1.28it/s]
 56%|█████▌    | 700/1261 [07:58<07:12,  1.30it/s]
 56%|█████▌    | 701/1261 [07:59<07:16,  1.28it/s]
 56%|█████▌    | 702/1261 [07:59<07:11,  1.29it/s]
 56%|█████▌    | 703/1261 [08:00<06:59,  1.33it/s]
 56%|█████▌    | 704/1261 [08:01<07:05,  1.31it/s]
 56%|█████▌    | 705/1261 [08:02<07:06,  1.30it/s]
 56%|█████▌    | 706/1261 [08:02<07:05,  1.31it/s]
 56%|█████▌    | 707/1261 [08:03<07:13,  1.28it/s]
 56%|█████▌    | 708/1261 [08:04<07:05,  1.30it/s]
 56%|█████▌    | 709/1261 [08:05<07:01,  1.31it/s]
 56%|█████▋    | 710/1261 [08:05<06:55,  1.32it/s]
 56%|█████▋    | 711/1261 [08:06<06:53,  1.33it/s]
 56%|█████▋    | 712/1261 [08:07<07:00,  1.31it/s]
 57%|█████▋    | 713/1261 [08:08<07:18,  1.25it/s]
 57%|█████▋    | 714/1261 [08:09<07:07,  1.28it/s]
 57%|█████▋    | 715/1261 [08:09<07:04,  1.29it/s]
 57%|█████▋    | 716/1261 [08:10<06:51,  1.32it/s]
 57%|█████▋    | 717/1261 [08:11<06:47,  1.33it/s]
 57%|█████▋    | 718/1261 [08:12<06:51,  1.32it/s]
 57%|█████▋    | 719/1261 [08:12<06:54,  1.31it/s]
 57%|█████▋    | 720/1261 [08:13<06:46,  1.33it/s]
 57%|█████▋    | 721/1261 [08:14<06:40,  1.35it/s]
 57%|█████▋    | 722/1261 [08:15<06:45,  1.33it/s]
 57%|█████▋    | 723/1261 [08:15<06:41,  1.34it/s]
 57%|█████▋    | 724/1261 [08:16<06:52,  1.30it/s]
 57%|█████▋    | 725/1261 [08:17<06:52,  1.30it/s]
 58%|█████▊    | 726/1261 [08:18<06:52,  1.30it/s]
 58%|█████▊    | 727/1261 [08:18<06:47,  1.31it/s]
 58%|█████▊    | 728/1261 [08:19<06:39,  1.33it/s]
 58%|█████▊    | 729/1261 [08:20<06:41,  1.32it/s]
 58%|█████▊    | 730/1261 [08:21<06:42,  1.32it/s]
 58%|█████▊    | 731/1261 [08:21<06:48,  1.30it/s]
 58%|█████▊    | 732/1261 [08:22<06:48,  1.29it/s]
 58%|█████▊    | 733/1261 [08:23<06:45,  1.30it/s]
 58%|█████▊    | 734/1261 [08:24<06:38,  1.32it/s]
 58%|█████▊    | 735/1261 [08:25<06:39,  1.32it/s]
 58%|█████▊    | 736/1261 [08:25<06:42,  1.30it/s]
 58%|█████▊    | 737/1261 [08:26<06:31,  1.34it/s]
 59%|█████▊    | 738/1261 [08:27<06:32,  1.33it/s]
 59%|█████▊    | 739/1261 [08:28<06:33,  1.33it/s]
 59%|█████▊    | 740/1261 [08:28<06:31,  1.33it/s]
 59%|█████▉    | 741/1261 [08:29<06:23,  1.36it/s]
 59%|█████▉    | 742/1261 [08:30<06:28,  1.34it/s]
 59%|█████▉    | 743/1261 [08:31<06:28,  1.33it/s]
 59%|█████▉    | 744/1261 [08:31<06:22,  1.35it/s]
 59%|█████▉    | 745/1261 [08:32<06:21,  1.35it/s]
 59%|█████▉    | 746/1261 [08:33<06:27,  1.33it/s]
 59%|█████▉    | 747/1261 [08:33<06:27,  1.33it/s]
 59%|█████▉    | 748/1261 [08:34<06:34,  1.30it/s]
 59%|█████▉    | 749/1261 [08:35<06:26,  1.32it/s]
 59%|█████▉    | 750/1261 [08:36<06:17,  1.35it/s]
 60%|█████▉    | 751/1261 [08:37<06:35,  1.29it/s]
 60%|█████▉    | 752/1261 [08:37<06:44,  1.26it/s]
 60%|█████▉    | 753/1261 [08:38<06:41,  1.27it/s]
 60%|█████▉    | 754/1261 [08:39<06:35,  1.28it/s]
 60%|█████▉    | 755/1261 [08:40<06:36,  1.28it/s]
 60%|█████▉    | 756/1261 [08:40<06:28,  1.30it/s]
 60%|██████    | 757/1261 [08:41<06:26,  1.30it/s]
 60%|██████    | 758/1261 [08:42<06:19,  1.32it/s]
 60%|██████    | 759/1261 [08:43<06:17,  1.33it/s]
 60%|██████    | 760/1261 [08:44<06:23,  1.31it/s]
 60%|██████    | 761/1261 [08:44<06:20,  1.31it/s]
 60%|██████    | 762/1261 [08:45<06:14,  1.33it/s]
 61%|██████    | 763/1261 [08:46<06:09,  1.35it/s]
 61%|██████    | 764/1261 [08:46<06:13,  1.33it/s]
 61%|██████    | 765/1261 [08:47<06:09,  1.34it/s]
 61%|██████    | 766/1261 [08:48<06:14,  1.32it/s]
 61%|██████    | 767/1261 [08:49<06:08,  1.34it/s]
 61%|██████    | 768/1261 [08:50<06:11,  1.33it/s]
 61%|██████    | 769/1261 [08:50<06:10,  1.33it/s]
 61%|██████    | 770/1261 [08:51<06:06,  1.34it/s]
 61%|██████    | 771/1261 [08:52<06:07,  1.33it/s]
 61%|██████    | 772/1261 [08:53<06:12,  1.31it/s]
 61%|██████▏   | 773/1261 [08:53<06:05,  1.34it/s]
 61%|██████▏   | 774/1261 [08:54<06:01,  1.35it/s]
 61%|██████▏   | 775/1261 [08:55<06:13,  1.30it/s]
 62%|██████▏   | 776/1261 [08:56<06:09,  1.31it/s]
 62%|██████▏   | 777/1261 [08:56<06:06,  1.32it/s]
 62%|██████▏   | 778/1261 [08:57<06:02,  1.33it/s]
 62%|██████▏   | 779/1261 [08:58<06:06,  1.32it/s]
 62%|██████▏   | 780/1261 [08:59<06:02,  1.33it/s]
 62%|██████▏   | 781/1261 [08:59<05:59,  1.33it/s]
 62%|██████▏   | 782/1261 [09:00<05:56,  1.35it/s]
 62%|██████▏   | 783/1261 [09:01<06:01,  1.32it/s]
 62%|██████▏   | 784/1261 [09:02<06:00,  1.32it/s]
 62%|██████▏   | 785/1261 [09:02<05:48,  1.37it/s]
 62%|██████▏   | 786/1261 [09:03<05:50,  1.36it/s]
 62%|██████▏   | 787/1261 [09:04<05:56,  1.33it/s]
 62%|██████▏   | 788/1261 [09:05<05:59,  1.32it/s]
 63%|██████▎   | 789/1261 [09:05<06:03,  1.30it/s]
 63%|██████▎   | 790/1261 [09:06<06:04,  1.29it/s]
 63%|██████▎   | 791/1261 [09:07<05:54,  1.33it/s]
 63%|██████▎   | 792/1261 [09:08<05:57,  1.31it/s]
 63%|██████▎   | 793/1261 [09:08<05:59,  1.30it/s]
 63%|██████▎   | 794/1261 [09:09<05:59,  1.30it/s]
 63%|██████▎   | 795/1261 [09:10<06:05,  1.28it/s]
 63%|██████▎   | 796/1261 [09:11<06:02,  1.28it/s]
 63%|██████▎   | 797/1261 [09:12<06:03,  1.28it/s]
 63%|██████▎   | 798/1261 [09:12<06:01,  1.28it/s]
 63%|██████▎   | 799/1261 [09:13<06:09,  1.25it/s]
 63%|██████▎   | 800/1261 [09:14<06:15,  1.23it/s]
 64%|██████▎   | 801/1261 [09:15<06:12,  1.23it/s]
 64%|██████▎   | 802/1261 [09:16<06:05,  1.26it/s]
 64%|██████▎   | 803/1261 [09:16<06:02,  1.26it/s]
 64%|██████▍   | 804/1261 [09:17<05:59,  1.27it/s]
 64%|██████▍   | 805/1261 [09:18<05:47,  1.31it/s]
 64%|██████▍   | 806/1261 [09:19<05:45,  1.32it/s]
 64%|██████▍   | 807/1261 [09:19<05:43,  1.32it/s]
 64%|██████▍   | 808/1261 [09:20<05:46,  1.31it/s]
 64%|██████▍   | 809/1261 [09:21<05:46,  1.30it/s]
 64%|██████▍   | 810/1261 [09:22<05:50,  1.29it/s]
 64%|██████▍   | 811/1261 [09:22<05:50,  1.28it/s]
 64%|██████▍   | 812/1261 [09:23<05:47,  1.29it/s]
 64%|██████▍   | 813/1261 [09:24<05:39,  1.32it/s]
 65%|██████▍   | 814/1261 [09:25<05:38,  1.32it/s]
 65%|██████▍   | 815/1261 [09:26<05:56,  1.25it/s]
 65%|██████▍   | 816/1261 [09:26<05:55,  1.25it/s]
 65%|██████▍   | 817/1261 [09:27<05:51,  1.26it/s]
 65%|██████▍   | 818/1261 [09:28<05:52,  1.26it/s]
 65%|██████▍   | 819/1261 [09:29<05:46,  1.28it/s]
 65%|██████▌   | 820/1261 [09:29<05:37,  1.31it/s]
 65%|██████▌   | 821/1261 [09:30<05:35,  1.31it/s]
 65%|██████▌   | 822/1261 [09:31<05:33,  1.32it/s]
 65%|██████▌   | 823/1261 [09:32<05:42,  1.28it/s]
 65%|██████▌   | 824/1261 [09:33<05:51,  1.24it/s]
 65%|██████▌   | 825/1261 [09:34<06:06,  1.19it/s]
 66%|██████▌   | 826/1261 [09:35<06:24,  1.13it/s]
 66%|██████▌   | 827/1261 [09:35<06:16,  1.15it/s]
 66%|██████▌   | 828/1261 [09:36<06:10,  1.17it/s]
 66%|██████▌   | 829/1261 [09:37<05:55,  1.22it/s]
 66%|██████▌   | 830/1261 [09:38<05:49,  1.23it/s]
 66%|██████▌   | 831/1261 [09:39<05:39,  1.27it/s]
 66%|██████▌   | 832/1261 [09:39<05:34,  1.28it/s]
 66%|██████▌   | 833/1261 [09:40<05:28,  1.30it/s]
 66%|██████▌   | 834/1261 [09:41<05:24,  1.32it/s]
 66%|██████▌   | 835/1261 [09:42<05:25,  1.31it/s]
 66%|██████▋   | 836/1261 [09:42<05:24,  1.31it/s]
 66%|██████▋   | 837/1261 [09:43<05:25,  1.30it/s]
 66%|██████▋   | 838/1261 [09:44<05:31,  1.28it/s]
 67%|██████▋   | 839/1261 [09:45<05:41,  1.24it/s]
 67%|██████▋   | 840/1261 [09:46<05:43,  1.23it/s]
 67%|██████▋   | 841/1261 [09:46<05:45,  1.22it/s]
 67%|██████▋   | 842/1261 [09:47<05:42,  1.22it/s]
 67%|██████▋   | 843/1261 [09:48<05:41,  1.22it/s]
 67%|██████▋   | 844/1261 [09:49<05:31,  1.26it/s]
 67%|██████▋   | 845/1261 [09:50<05:23,  1.28it/s]
 67%|██████▋   | 846/1261 [09:50<05:26,  1.27it/s]
 67%|██████▋   | 847/1261 [09:51<05:20,  1.29it/s]
 67%|██████▋   | 848/1261 [09:52<05:15,  1.31it/s]
 67%|██████▋   | 849/1261 [09:53<05:15,  1.30it/s]
 67%|██████▋   | 850/1261 [09:53<05:15,  1.30it/s]
 67%|██████▋   | 851/1261 [09:54<05:15,  1.30it/s]
 68%|██████▊   | 852/1261 [09:55<05:14,  1.30it/s]
 68%|██████▊   | 853/1261 [09:56<05:10,  1.31it/s]
 68%|██████▊   | 854/1261 [09:56<05:14,  1.29it/s]
 68%|██████▊   | 855/1261 [09:57<05:12,  1.30it/s]
 68%|██████▊   | 856/1261 [09:58<05:04,  1.33it/s]
 68%|██████▊   | 857/1261 [09:59<05:06,  1.32it/s]
 68%|██████▊   | 858/1261 [10:00<05:19,  1.26it/s]
 68%|██████▊   | 859/1261 [10:00<05:18,  1.26it/s]
 68%|██████▊   | 860/1261 [10:01<05:18,  1.26it/s]
 68%|██████▊   | 861/1261 [10:02<05:12,  1.28it/s]
 68%|██████▊   | 862/1261 [10:03<05:09,  1.29it/s]
 68%|██████▊   | 863/1261 [10:03<05:11,  1.28it/s]
 69%|██████▊   | 864/1261 [10:04<05:07,  1.29it/s]
 69%|██████▊   | 865/1261 [10:05<05:10,  1.27it/s]
 69%|██████▊   | 866/1261 [10:06<05:12,  1.26it/s]
 69%|██████▉   | 867/1261 [10:07<05:10,  1.27it/s]
 69%|██████▉   | 868/1261 [10:07<05:08,  1.27it/s]
 69%|██████▉   | 869/1261 [10:08<05:03,  1.29it/s]
 69%|██████▉   | 870/1261 [10:09<05:01,  1.30it/s]
 69%|██████▉   | 871/1261 [10:10<04:58,  1.31it/s]
 69%|██████▉   | 872/1261 [10:10<04:54,  1.32it/s]
 69%|██████▉   | 873/1261 [10:11<04:59,  1.30it/s]
 69%|██████▉   | 874/1261 [10:12<04:59,  1.29it/s]
 69%|██████▉   | 875/1261 [10:13<05:04,  1.27it/s]
 69%|██████▉   | 876/1261 [10:14<04:58,  1.29it/s]
 70%|██████▉   | 877/1261 [10:14<04:50,  1.32it/s]
 70%|██████▉   | 878/1261 [10:15<04:48,  1.33it/s]
 70%|██████▉   | 879/1261 [10:16<04:46,  1.33it/s]
 70%|██████▉   | 880/1261 [10:17<04:47,  1.33it/s]
 70%|██████▉   | 881/1261 [10:17<04:52,  1.30it/s]
 70%|██████▉   | 882/1261 [10:18<04:46,  1.32it/s]
 70%|███████   | 883/1261 [10:19<04:41,  1.34it/s]
 70%|███████   | 884/1261 [10:20<04:42,  1.34it/s]
 70%|███████   | 885/1261 [10:20<04:39,  1.34it/s]
 70%|███████   | 886/1261 [10:21<04:44,  1.32it/s]
 70%|███████   | 887/1261 [10:22<04:39,  1.34it/s]
 70%|███████   | 888/1261 [10:23<04:44,  1.31it/s]
 70%|███████   | 889/1261 [10:23<04:41,  1.32it/s]
 71%|███████   | 890/1261 [10:24<04:42,  1.31it/s]
 71%|███████   | 891/1261 [10:25<04:47,  1.28it/s]
 71%|███████   | 892/1261 [10:26<04:50,  1.27it/s]
 71%|███████   | 893/1261 [10:26<04:44,  1.29it/s]
 71%|███████   | 894/1261 [10:27<04:48,  1.27it/s]
 71%|███████   | 895/1261 [10:28<04:54,  1.24it/s]
 71%|███████   | 896/1261 [10:29<04:51,  1.25it/s]
 71%|███████   | 897/1261 [10:30<04:45,  1.28it/s]
 71%|███████   | 898/1261 [10:30<04:44,  1.28it/s]
 71%|███████▏  | 899/1261 [10:31<04:39,  1.30it/s]
 71%|███████▏  | 900/1261 [10:32<04:38,  1.29it/s]
 71%|███████▏  | 901/1261 [10:33<04:37,  1.30it/s]
 72%|███████▏  | 902/1261 [10:33<04:32,  1.32it/s]
 72%|███████▏  | 903/1261 [10:34<04:36,  1.29it/s]
 72%|███████▏  | 904/1261 [10:35<04:42,  1.26it/s]
 72%|███████▏  | 905/1261 [10:36<04:40,  1.27it/s]
 72%|███████▏  | 906/1261 [10:37<04:43,  1.25it/s]
 72%|███████▏  | 907/1261 [10:37<04:39,  1.27it/s]
 72%|███████▏  | 908/1261 [10:38<04:32,  1.29it/s]
 72%|███████▏  | 909/1261 [10:39<04:28,  1.31it/s]
 72%|███████▏  | 910/1261 [10:40<04:31,  1.30it/s]
 72%|███████▏  | 911/1261 [10:41<04:36,  1.27it/s]
 72%|███████▏  | 912/1261 [10:41<04:46,  1.22it/s]
 72%|███████▏  | 913/1261 [10:42<04:44,  1.23it/s]
 72%|███████▏  | 914/1261 [10:43<04:46,  1.21it/s]
 73%|███████▎  | 915/1261 [10:44<04:39,  1.24it/s]
 73%|███████▎  | 916/1261 [10:45<04:35,  1.25it/s]
 73%|███████▎  | 917/1261 [10:45<04:35,  1.25it/s]
 73%|███████▎  | 918/1261 [10:46<04:38,  1.23it/s]
 73%|███████▎  | 919/1261 [10:47<04:28,  1.27it/s]
 73%|███████▎  | 920/1261 [10:48<04:25,  1.28it/s]
 73%|███████▎  | 921/1261 [10:49<04:35,  1.23it/s]
 73%|███████▎  | 922/1261 [10:49<04:26,  1.27it/s]
 73%|███████▎  | 923/1261 [10:50<04:24,  1.28it/s]
 73%|███████▎  | 924/1261 [10:51<04:14,  1.32it/s]
 73%|███████▎  | 925/1261 [10:52<04:13,  1.33it/s]
 73%|███████▎  | 926/1261 [10:52<04:11,  1.33it/s]
 74%|███████▎  | 927/1261 [10:53<04:11,  1.33it/s]
 74%|███████▎  | 928/1261 [10:54<04:11,  1.32it/s]
 74%|███████▎  | 929/1261 [10:55<04:18,  1.29it/s]
 74%|███████▍  | 930/1261 [10:56<04:19,  1.28it/s]
 74%|███████▍  | 931/1261 [10:56<04:20,  1.27it/s]
 74%|███████▍  | 932/1261 [10:57<04:20,  1.26it/s]
 74%|███████▍  | 933/1261 [10:58<04:10,  1.31it/s]
 74%|███████▍  | 934/1261 [10:59<04:11,  1.30it/s]
 74%|███████▍  | 935/1261 [10:59<04:08,  1.31it/s]
 74%|███████▍  | 936/1261 [11:00<04:09,  1.30it/s]
 74%|███████▍  | 937/1261 [11:01<04:02,  1.34it/s]
 74%|███████▍  | 938/1261 [11:02<04:06,  1.31it/s]
 74%|███████▍  | 939/1261 [11:02<04:04,  1.32it/s]
 75%|███████▍  | 940/1261 [11:03<04:04,  1.31it/s]
 75%|███████▍  | 941/1261 [11:04<04:05,  1.30it/s]
 75%|███████▍  | 942/1261 [11:05<04:28,  1.19it/s]
 75%|███████▍  | 943/1261 [11:06<04:42,  1.13it/s]
 75%|███████▍  | 944/1261 [11:06<04:09,  1.27it/s]
 75%|███████▍  | 945/1261 [11:07<03:42,  1.42it/s]
 75%|███████▌  | 946/1261 [11:07<03:22,  1.56it/s]
 75%|███████▌  | 947/1261 [11:08<03:11,  1.64it/s]
 75%|███████▌  | 948/1261 [11:09<03:00,  1.73it/s]
 75%|███████▌  | 949/1261 [11:09<02:54,  1.79it/s]
 75%|███████▌  | 950/1261 [11:10<02:48,  1.84it/s]
 75%|███████▌  | 951/1261 [11:10<02:46,  1.86it/s]
 75%|███████▌  | 952/1261 [11:11<02:43,  1.89it/s]
 76%|███████▌  | 953/1261 [11:11<02:37,  1.95it/s]
 76%|███████▌  | 954/1261 [11:12<02:36,  1.97it/s]
 76%|███████▌  | 955/1261 [11:12<02:37,  1.94it/s]
 76%|███████▌  | 956/1261 [11:13<02:38,  1.92it/s]
 76%|███████▌  | 957/1261 [11:13<02:36,  1.94it/s]
 76%|███████▌  | 958/1261 [11:14<02:33,  1.97it/s]
 76%|███████▌  | 959/1261 [11:14<02:36,  1.93it/s]
 76%|███████▌  | 960/1261 [11:15<02:38,  1.90it/s]
 76%|███████▌  | 961/1261 [11:15<02:38,  1.89it/s]
 76%|███████▋  | 962/1261 [11:16<02:36,  1.91it/s]
 76%|███████▋  | 963/1261 [11:16<02:36,  1.90it/s]
 76%|███████▋  | 964/1261 [11:17<02:35,  1.91it/s]
 77%|███████▋  | 965/1261 [11:17<02:35,  1.90it/s]
 77%|███████▋  | 966/1261 [11:18<02:32,  1.93it/s]
 77%|███████▋  | 967/1261 [11:18<02:34,  1.91it/s]
 77%|███████▋  | 968/1261 [11:19<02:32,  1.92it/s]
 77%|███████▋  | 969/1261 [11:19<02:32,  1.92it/s]
 77%|███████▋  | 970/1261 [11:20<02:31,  1.92it/s]
 77%|███████▋  | 971/1261 [11:20<02:32,  1.90it/s]
 77%|███████▋  | 972/1261 [11:21<02:29,  1.93it/s]
 77%|███████▋  | 973/1261 [11:21<02:28,  1.93it/s]
 77%|███████▋  | 974/1261 [11:22<02:27,  1.94it/s]
 77%|███████▋  | 975/1261 [11:23<02:30,  1.90it/s]
 77%|███████▋  | 976/1261 [11:23<02:28,  1.92it/s]
 77%|███████▋  | 977/1261 [11:24<02:27,  1.93it/s]
 78%|███████▊  | 978/1261 [11:24<02:25,  1.94it/s]
 78%|███████▊  | 979/1261 [11:25<02:27,  1.91it/s]
 78%|███████▊  | 980/1261 [11:25<02:29,  1.88it/s]
 78%|███████▊  | 981/1261 [11:26<02:25,  1.92it/s]
 78%|███████▊  | 982/1261 [11:26<02:23,  1.94it/s]
 78%|███████▊  | 983/1261 [11:27<02:23,  1.94it/s]
 78%|███████▊  | 984/1261 [11:27<02:22,  1.94it/s]
 78%|███████▊  | 985/1261 [11:28<02:22,  1.93it/s]
 78%|███████▊  | 986/1261 [11:28<02:21,  1.95it/s]
 78%|███████▊  | 987/1261 [11:29<02:21,  1.94it/s]
 78%|███████▊  | 988/1261 [11:29<02:21,  1.92it/s]
 78%|███████▊  | 989/1261 [11:30<02:20,  1.94it/s]
 79%|███████▊  | 990/1261 [11:30<02:21,  1.92it/s]
 79%|███████▊  | 991/1261 [11:31<02:21,  1.91it/s]
 79%|███████▊  | 992/1261 [11:31<02:19,  1.92it/s]
 79%|███████▊  | 993/1261 [11:32<02:18,  1.94it/s]
 79%|███████▉  | 994/1261 [11:32<02:16,  1.95it/s]
 79%|███████▉  | 995/1261 [11:33<02:20,  1.89it/s]
 79%|███████▉  | 996/1261 [11:33<02:18,  1.92it/s]
 79%|███████▉  | 997/1261 [11:34<02:15,  1.95it/s]
 79%|███████▉  | 998/1261 [11:34<02:14,  1.95it/s]
 79%|███████▉  | 999/1261 [11:35<02:15,  1.93it/s]
 79%|███████▉  | 1000/1261 [11:35<02:16,  1.91it/s]
 79%|███████▉  | 1001/1261 [11:36<02:16,  1.91it/s]
 79%|███████▉  | 1002/1261 [11:37<02:15,  1.91it/s]
 80%|███████▉  | 1003/1261 [11:37<02:16,  1.89it/s]
 80%|███████▉  | 1004/1261 [11:38<02:17,  1.87it/s]
 80%|███████▉  | 1005/1261 [11:38<02:17,  1.86it/s]
 80%|███████▉  | 1006/1261 [11:39<02:15,  1.88it/s]
 80%|███████▉  | 1007/1261 [11:39<02:23,  1.78it/s]
 80%|███████▉  | 1008/1261 [11:40<02:31,  1.67it/s]
 80%|████████  | 1009/1261 [11:41<02:25,  1.73it/s]
 80%|████████  | 1010/1261 [11:41<02:20,  1.79it/s]
 80%|████████  | 1011/1261 [11:42<02:20,  1.79it/s]
 80%|████████  | 1012/1261 [11:42<02:18,  1.80it/s]
 80%|████████  | 1013/1261 [11:43<02:17,  1.81it/s]
 80%|████████  | 1014/1261 [11:43<02:14,  1.84it/s]
 80%|████████  | 1015/1261 [11:44<02:14,  1.83it/s]
 81%|████████  | 1016/1261 [11:44<02:13,  1.84it/s]
 81%|████████  | 1017/1261 [11:45<02:10,  1.86it/s]
 81%|████████  | 1018/1261 [11:45<02:09,  1.88it/s]
 81%|████████  | 1019/1261 [11:46<02:08,  1.89it/s]
 81%|████████  | 1020/1261 [11:46<02:07,  1.89it/s]
 81%|████████  | 1021/1261 [11:47<02:06,  1.90it/s]
 81%|████████  | 1022/1261 [11:47<02:08,  1.86it/s]
 81%|████████  | 1023/1261 [11:48<02:07,  1.86it/s]
 81%|████████  | 1024/1261 [11:49<02:09,  1.83it/s]
 81%|████████▏ | 1025/1261 [11:49<02:05,  1.89it/s]
 81%|████████▏ | 1026/1261 [11:50<02:04,  1.88it/s]
 81%|████████▏ | 1027/1261 [11:50<02:07,  1.84it/s]
 82%|████████▏ | 1028/1261 [11:51<02:04,  1.87it/s]
 82%|████████▏ | 1029/1261 [11:51<02:06,  1.83it/s]
 82%|████████▏ | 1030/1261 [11:52<02:06,  1.83it/s]
 82%|████████▏ | 1031/1261 [11:52<02:06,  1.82it/s]
 82%|████████▏ | 1032/1261 [11:53<02:06,  1.81it/s]
 82%|████████▏ | 1033/1261 [11:53<02:05,  1.81it/s]
 82%|████████▏ | 1034/1261 [11:54<02:03,  1.83it/s]
 82%|████████▏ | 1035/1261 [11:55<02:01,  1.85it/s]
 82%|████████▏ | 1036/1261 [11:55<02:00,  1.86it/s]
 82%|████████▏ | 1037/1261 [11:56<02:00,  1.86it/s]
 82%|████████▏ | 1038/1261 [11:56<01:58,  1.88it/s]
 82%|████████▏ | 1039/1261 [11:57<01:55,  1.92it/s]
 82%|████████▏ | 1040/1261 [11:57<01:54,  1.92it/s]
 83%|████████▎ | 1041/1261 [11:58<01:53,  1.94it/s]
 83%|████████▎ | 1042/1261 [11:58<01:52,  1.94it/s]
 83%|████████▎ | 1043/1261 [11:59<01:54,  1.91it/s]
 83%|████████▎ | 1044/1261 [11:59<01:53,  1.91it/s]
 83%|████████▎ | 1045/1261 [12:00<01:51,  1.94it/s]
 83%|████████▎ | 1046/1261 [12:00<01:49,  1.96it/s]
 83%|████████▎ | 1047/1261 [12:01<01:49,  1.95it/s]
 83%|████████▎ | 1048/1261 [12:01<01:49,  1.95it/s]
 83%|████████▎ | 1049/1261 [12:02<01:47,  1.97it/s]
 83%|████████▎ | 1050/1261 [12:02<01:47,  1.96it/s]
 83%|████████▎ | 1051/1261 [12:03<01:46,  1.97it/s]
 83%|████████▎ | 1052/1261 [12:03<01:48,  1.93it/s]
 84%|████████▎ | 1053/1261 [12:04<01:47,  1.93it/s]
 84%|████████▎ | 1054/1261 [12:04<01:48,  1.91it/s]
 84%|████████▎ | 1055/1261 [12:05<01:46,  1.94it/s]
 84%|████████▎ | 1056/1261 [12:05<01:46,  1.93it/s]
 84%|████████▍ | 1057/1261 [12:06<01:46,  1.92it/s]
 84%|████████▍ | 1058/1261 [12:06<01:47,  1.89it/s]
 84%|████████▍ | 1059/1261 [12:07<01:47,  1.87it/s]
 84%|████████▍ | 1060/1261 [12:08<01:48,  1.85it/s]
 84%|████████▍ | 1061/1261 [12:08<01:49,  1.83it/s]
 84%|████████▍ | 1062/1261 [12:09<01:48,  1.83it/s]
 84%|████████▍ | 1063/1261 [12:09<01:48,  1.82it/s]
 84%|████████▍ | 1064/1261 [12:10<01:46,  1.85it/s]
 84%|████████▍ | 1065/1261 [12:10<01:47,  1.83it/s]
 85%|████████▍ | 1066/1261 [12:11<01:45,  1.86it/s]
 85%|████████▍ | 1067/1261 [12:11<01:46,  1.83it/s]
 85%|████████▍ | 1068/1261 [12:12<01:45,  1.83it/s]
 85%|████████▍ | 1069/1261 [12:13<01:47,  1.79it/s]
 85%|████████▍ | 1070/1261 [12:13<01:46,  1.79it/s]
 85%|████████▍ | 1071/1261 [12:14<01:46,  1.78it/s]
 85%|████████▌ | 1072/1261 [12:14<01:44,  1.81it/s]
 85%|████████▌ | 1073/1261 [12:15<01:41,  1.85it/s]
 85%|████████▌ | 1074/1261 [12:15<01:43,  1.81it/s]
 85%|████████▌ | 1075/1261 [12:16<01:40,  1.85it/s]
 85%|████████▌ | 1076/1261 [12:16<01:38,  1.88it/s]
 85%|████████▌ | 1077/1261 [12:17<01:37,  1.88it/s]
 85%|████████▌ | 1078/1261 [12:17<01:36,  1.90it/s]
 86%|████████▌ | 1079/1261 [12:18<01:36,  1.89it/s]
 86%|████████▌ | 1080/1261 [12:18<01:34,  1.91it/s]
 86%|████████▌ | 1081/1261 [12:19<01:34,  1.91it/s]
 86%|████████▌ | 1082/1261 [12:19<01:34,  1.90it/s]
 86%|████████▌ | 1083/1261 [12:20<01:32,  1.92it/s]
 86%|████████▌ | 1084/1261 [12:21<01:33,  1.89it/s]
 86%|████████▌ | 1085/1261 [12:21<01:31,  1.92it/s]
 86%|████████▌ | 1086/1261 [12:22<01:31,  1.90it/s]
 86%|████████▌ | 1087/1261 [12:22<01:30,  1.93it/s]
 86%|████████▋ | 1088/1261 [12:23<01:33,  1.85it/s]
 86%|████████▋ | 1089/1261 [12:23<01:32,  1.86it/s]
 86%|████████▋ | 1090/1261 [12:26<03:19,  1.17s/it]
 87%|████████▋ | 1091/1261 [12:26<02:52,  1.02s/it]
 87%|████████▋ | 1092/1261 [12:27<02:27,  1.15it/s]
 87%|████████▋ | 1093/1261 [12:28<02:11,  1.28it/s]
 87%|████████▋ | 1094/1261 [12:28<01:56,  1.43it/s]
 87%|████████▋ | 1095/1261 [12:29<01:46,  1.56it/s]
 87%|████████▋ | 1096/1261 [12:29<01:39,  1.67it/s]
 87%|████████▋ | 1097/1261 [12:30<01:34,  1.74it/s]
 87%|████████▋ | 1098/1261 [12:30<01:31,  1.78it/s]
 87%|████████▋ | 1099/1261 [12:31<01:28,  1.83it/s]
 87%|████████▋ | 1100/1261 [12:31<01:26,  1.87it/s]
 87%|████████▋ | 1101/1261 [12:32<01:24,  1.90it/s]
 87%|████████▋ | 1102/1261 [12:32<01:23,  1.90it/s]
 87%|████████▋ | 1103/1261 [12:33<01:24,  1.88it/s]
 88%|████████▊ | 1104/1261 [12:33<01:22,  1.90it/s]
 88%|████████▊ | 1105/1261 [12:34<01:21,  1.92it/s]
 88%|████████▊ | 1106/1261 [12:34<01:20,  1.92it/s]
 88%|████████▊ | 1107/1261 [12:35<01:20,  1.92it/s]
 88%|████████▊ | 1108/1261 [12:35<01:20,  1.91it/s]
 88%|████████▊ | 1109/1261 [12:36<01:18,  1.92it/s]
 88%|████████▊ | 1110/1261 [12:36<01:19,  1.91it/s]
 88%|████████▊ | 1111/1261 [12:37<01:18,  1.91it/s]
 88%|████████▊ | 1112/1261 [12:37<01:19,  1.88it/s]
 88%|████████▊ | 1113/1261 [12:38<01:18,  1.89it/s]
 88%|████████▊ | 1114/1261 [12:38<01:17,  1.89it/s]
 88%|████████▊ | 1115/1261 [12:39<01:15,  1.93it/s]
 89%|████████▊ | 1116/1261 [12:40<01:15,  1.93it/s]
 89%|████████▊ | 1117/1261 [12:40<01:14,  1.93it/s]
 89%|████████▊ | 1118/1261 [12:41<01:15,  1.90it/s]
 89%|████████▊ | 1119/1261 [12:41<01:14,  1.92it/s]
 89%|████████▉ | 1120/1261 [12:42<01:12,  1.94it/s]
 89%|████████▉ | 1121/1261 [12:42<01:13,  1.92it/s]
 89%|████████▉ | 1122/1261 [12:43<01:13,  1.89it/s]
 89%|████████▉ | 1123/1261 [12:43<01:11,  1.92it/s]
 89%|████████▉ | 1124/1261 [12:44<01:10,  1.94it/s]
 89%|████████▉ | 1125/1261 [12:44<01:10,  1.94it/s]
 89%|████████▉ | 1126/1261 [12:45<01:09,  1.94it/s]
 89%|████████▉ | 1127/1261 [12:45<01:08,  1.95it/s]
 89%|████████▉ | 1128/1261 [12:46<01:07,  1.98it/s]
 90%|████████▉ | 1129/1261 [12:46<01:06,  2.00it/s]
 90%|████████▉ | 1130/1261 [12:47<01:05,  2.01it/s]
 90%|████████▉ | 1131/1261 [12:47<01:05,  2.00it/s]
 90%|████████▉ | 1132/1261 [12:48<01:04,  2.01it/s]
 90%|████████▉ | 1133/1261 [12:48<01:03,  2.01it/s]
 90%|████████▉ | 1134/1261 [12:49<01:03,  2.00it/s]
 90%|█████████ | 1135/1261 [12:49<01:03,  1.99it/s]
 90%|█████████ | 1136/1261 [12:50<01:02,  2.00it/s]
 90%|█████████ | 1137/1261 [12:50<01:01,  2.01it/s]
 90%|█████████ | 1138/1261 [12:51<01:01,  2.01it/s]
 90%|█████████ | 1139/1261 [12:51<01:01,  1.99it/s]
 90%|█████████ | 1140/1261 [12:52<01:01,  1.98it/s]
 90%|█████████ | 1141/1261 [12:52<00:59,  2.00it/s]
 91%|█████████ | 1142/1261 [12:53<00:59,  1.99it/s]
 91%|█████████ | 1143/1261 [12:53<00:59,  1.97it/s]
 91%|█████████ | 1144/1261 [12:54<00:59,  1.97it/s]
 91%|█████████ | 1145/1261 [12:54<00:58,  1.99it/s]
 91%|█████████ | 1146/1261 [12:55<00:57,  1.99it/s]
 91%|█████████ | 1147/1261 [12:55<00:57,  1.97it/s]
 91%|█████████ | 1148/1261 [12:56<00:58,  1.94it/s]
 91%|█████████ | 1149/1261 [12:56<00:56,  1.97it/s]
 91%|█████████ | 1150/1261 [12:57<00:55,  2.01it/s]
 91%|█████████▏| 1151/1261 [12:57<00:55,  1.97it/s]
 91%|█████████▏| 1152/1261 [12:58<00:54,  2.00it/s]
 91%|█████████▏| 1153/1261 [12:58<00:54,  2.00it/s]
 92%|█████████▏| 1154/1261 [12:59<00:52,  2.02it/s]
 92%|█████████▏| 1155/1261 [12:59<00:53,  2.00it/s]
 92%|█████████▏| 1156/1261 [13:00<00:52,  2.01it/s]
 92%|█████████▏| 1157/1261 [13:00<00:52,  1.98it/s]
 92%|█████████▏| 1158/1261 [13:01<00:51,  2.01it/s]
 92%|█████████▏| 1159/1261 [13:01<00:50,  2.01it/s]
 92%|█████████▏| 1160/1261 [13:02<00:49,  2.04it/s]
 92%|█████████▏| 1161/1261 [13:02<00:48,  2.05it/s]
 92%|█████████▏| 1162/1261 [13:03<00:48,  2.05it/s]
 92%|█████████▏| 1163/1261 [13:03<00:48,  2.02it/s]
 92%|█████████▏| 1164/1261 [13:04<00:47,  2.03it/s]
 92%|█████████▏| 1165/1261 [13:04<00:47,  2.02it/s]
 92%|█████████▏| 1166/1261 [13:05<00:47,  2.00it/s]
 93%|█████████▎| 1167/1261 [13:05<00:47,  1.99it/s]
 93%|█████████▎| 1168/1261 [13:06<00:45,  2.03it/s]
 93%|█████████▎| 1169/1261 [13:06<00:45,  2.04it/s]
 93%|█████████▎| 1170/1261 [13:07<00:44,  2.03it/s]
 93%|█████████▎| 1171/1261 [13:07<00:44,  2.01it/s]
 93%|█████████▎| 1172/1261 [13:08<00:43,  2.03it/s]
 93%|█████████▎| 1173/1261 [13:08<00:43,  2.04it/s]
 93%|█████████▎| 1174/1261 [13:09<00:42,  2.05it/s]
 93%|█████████▎| 1175/1261 [13:09<00:43,  1.99it/s]
 93%|█████████▎| 1176/1261 [13:10<00:41,  2.03it/s]
 93%|█████████▎| 1177/1261 [13:10<00:40,  2.06it/s]
 93%|█████████▎| 1178/1261 [13:11<00:40,  2.03it/s]
 93%|█████████▎| 1179/1261 [13:11<00:41,  1.99it/s]
 94%|█████████▎| 1180/1261 [13:12<00:41,  1.97it/s]
 94%|█████████▎| 1181/1261 [13:12<00:40,  1.98it/s]
 94%|█████████▎| 1182/1261 [13:13<00:39,  1.99it/s]
 94%|█████████▍| 1183/1261 [13:13<00:39,  1.96it/s]
 94%|█████████▍| 1184/1261 [13:14<00:38,  1.99it/s]
 94%|█████████▍| 1185/1261 [13:14<00:38,  1.98it/s]
 94%|█████████▍| 1186/1261 [13:15<00:37,  2.01it/s]
 94%|█████████▍| 1187/1261 [13:15<00:36,  2.01it/s]
 94%|█████████▍| 1188/1261 [13:16<00:36,  2.01it/s]
 94%|█████████▍| 1189/1261 [13:16<00:36,  1.99it/s]
 94%|█████████▍| 1190/1261 [13:17<00:35,  2.00it/s]
 94%|█████████▍| 1191/1261 [13:17<00:35,  1.99it/s]
 95%|█████████▍| 1192/1261 [13:18<00:34,  1.99it/s]
 95%|█████████▍| 1193/1261 [13:18<00:34,  1.96it/s]
 95%|█████████▍| 1194/1261 [13:19<00:33,  1.99it/s]
 95%|█████████▍| 1195/1261 [13:19<00:33,  1.99it/s]
 95%|█████████▍| 1196/1261 [13:20<00:32,  2.01it/s]
 95%|█████████▍| 1197/1261 [13:20<00:31,  2.01it/s]
 95%|█████████▌| 1198/1261 [13:21<00:31,  2.01it/s]
 95%|█████████▌| 1199/1261 [13:21<00:30,  2.00it/s]
 95%|█████████▌| 1200/1261 [13:22<00:31,  1.96it/s]
 95%|█████████▌| 1201/1261 [13:22<00:30,  1.95it/s]
 95%|█████████▌| 1202/1261 [13:23<00:30,  1.91it/s]
 95%|█████████▌| 1203/1261 [13:23<00:30,  1.91it/s]
 95%|█████████▌| 1204/1261 [13:24<00:29,  1.94it/s]
 96%|█████████▌| 1205/1261 [13:24<00:29,  1.93it/s]
 96%|█████████▌| 1206/1261 [13:25<00:28,  1.95it/s]
 96%|█████████▌| 1207/1261 [13:25<00:27,  1.95it/s]
 96%|█████████▌| 1208/1261 [13:26<00:26,  1.98it/s]
 96%|█████████▌| 1209/1261 [13:26<00:26,  1.97it/s]
 96%|█████████▌| 1210/1261 [13:27<00:25,  1.99it/s]
 96%|█████████▌| 1211/1261 [13:27<00:25,  1.97it/s]
 96%|█████████▌| 1212/1261 [13:28<00:24,  2.00it/s]
 96%|█████████▌| 1213/1261 [13:28<00:24,  1.99it/s]
 96%|█████████▋| 1214/1261 [13:29<00:23,  2.00it/s]
 96%|█████████▋| 1215/1261 [13:29<00:23,  1.97it/s]
 96%|█████████▋| 1216/1261 [13:30<00:22,  2.00it/s]
 97%|█████████▋| 1217/1261 [13:30<00:21,  2.02it/s]
 97%|█████████▋| 1218/1261 [13:31<00:21,  1.99it/s]
 97%|█████████▋| 1219/1261 [13:31<00:21,  1.98it/s]
 97%|█████████▋| 1220/1261 [13:32<00:20,  1.97it/s]
 97%|█████████▋| 1221/1261 [13:32<00:20,  1.99it/s]
 97%|█████████▋| 1222/1261 [13:33<00:19,  1.99it/s]
 97%|█████████▋| 1223/1261 [13:33<00:19,  1.96it/s]
 97%|█████████▋| 1224/1261 [13:34<00:18,  1.98it/s]
 97%|█████████▋| 1225/1261 [13:34<00:17,  2.02it/s]
 97%|█████████▋| 1226/1261 [13:35<00:17,  2.03it/s]
 97%|█████████▋| 1227/1261 [13:35<00:17,  1.99it/s]
 97%|█████████▋| 1228/1261 [13:36<00:16,  1.99it/s]
 97%|█████████▋| 1229/1261 [13:36<00:16,  1.94it/s]
 98%|█████████▊| 1230/1261 [13:37<00:15,  1.96it/s]
 98%|█████████▊| 1231/1261 [13:37<00:15,  1.95it/s]
 98%|█████████▊| 1232/1261 [13:38<00:15,  1.93it/s]
 98%|█████████▊| 1233/1261 [13:38<00:14,  1.95it/s]
 98%|█████████▊| 1234/1261 [13:39<00:13,  1.99it/s]
 98%|█████████▊| 1235/1261 [13:39<00:13,  1.98it/s]
 98%|█████████▊| 1236/1261 [13:40<00:12,  1.97it/s]
 98%|█████████▊| 1237/1261 [13:40<00:12,  1.97it/s]
 98%|█████████▊| 1238/1261 [13:41<00:11,  1.99it/s]
 98%|█████████▊| 1239/1261 [13:41<00:11,  1.98it/s]
 98%|█████████▊| 1240/1261 [13:42<00:10,  1.96it/s]
 98%|█████████▊| 1241/1261 [13:42<00:10,  1.97it/s]
 98%|█████████▊| 1242/1261 [13:43<00:09,  1.99it/s]
 99%|█████████▊| 1243/1261 [13:43<00:09,  1.97it/s]
 99%|█████████▊| 1244/1261 [13:44<00:08,  1.97it/s]
 99%|█████████▊| 1245/1261 [13:44<00:08,  1.98it/s]
 99%|█████████▉| 1246/1261 [13:45<00:07,  2.00it/s]
 99%|█████████▉| 1247/1261 [13:45<00:07,  1.98it/s]
 99%|█████████▉| 1248/1261 [13:46<00:06,  1.96it/s]
 99%|█████████▉| 1249/1261 [13:47<00:06,  1.98it/s]
 99%|█████████▉| 1250/1261 [13:47<00:05,  1.99it/s]
 99%|█████████▉| 1251/1261 [13:48<00:05,  1.97it/s]
 99%|█████████▉| 1252/1261 [13:48<00:04,  1.95it/s]
 99%|█████████▉| 1253/1261 [13:49<00:04,  1.97it/s]
 99%|█████████▉| 1254/1261 [13:49<00:03,  1.99it/s]
100%|█████████▉| 1255/1261 [13:50<00:03,  1.95it/s]
100%|█████████▉| 1256/1261 [13:50<00:02,  1.96it/s]
100%|█████████▉| 1257/1261 [13:51<00:02,  1.98it/s]
100%|█████████▉| 1258/1261 [13:51<00:01,  2.01it/s]
100%|█████████▉| 1259/1261 [13:52<00:01,  1.99it/s]
100%|█████████▉| 1260/1261 [13:52<00:00,  1.98it/s]

[MoviePy] Done.
[MoviePy] >>>> Video ready: ./movies/project.mp4 

In [ ]: